【问题标题】:String assignment with spaces returning null带空格的字符串赋值返回 null
【发布时间】:2011-03-02 11:49:45
【问题描述】:

当我把 //private String namespace = "###Name:"+name+" ###";和 system.out.println(namespace) 它出来为空?

我想创建一个 tagmaker 程序,但我不知道如何排列右侧的 #。

/*################################################
###               ANNUAL CONFERENCE            ###
############################################### #
###Name:Simon                             ###
###                                           ###
############################################### #
###Organization:NBA             ###
###                                             ###
################################################*/

如何为我设置的任何给定名称排列它们? 我想设置名称,设置组织,打印带有名称和组织的标签,清除名称和组织,然后打印一个空白标签。

----------------更新 4:09AM------------------------- - 我将在此之后对我的代码进行建模:

public class Divers {
    public static void main(String args[]){
      String format = "|%1$-10s|%2$-10s|%3$-20s|\n";
      System.out.format(format, "FirstName", "Init.", "LastName");
      System.out.format(format, "Real", "", "Gagnon");
      System.out.format(format, "John", "D", "Doe");

      String ex[] = { "John", "F.", "Kennedy" };

      System.out.format(String.format(format, (Object[])ex));
    }
   }

但是有人可以告诉我如何以另一种方式做到这一点吗?仅用于学习目的

public class AddressBookTester {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
TagMaker test =  new TagMaker("Simon", "NBA");

test.printlL();

    }

}

public class TagMaker {

private String name;
private String organization;
private String l = "################################################";
private String annual= "###               ANNUAL CONFERENCE            ###";
//private String namespace = "###Name:"+name+"                ###";
private String l2= "###                                             ###";
//private String organizationspace= "###Organization:"+organization+"###";
TagMaker (){

}

TagMaker (String tempName, String tempOrg){
name = tempName;
organization = tempOrg;

}
    void setname(String tempName){
        name = tempName;
    }

    String getname(){
        return name;
    }

    void setorganization(String tempOrg)
    {
            organization = tempOrg;
    }

    String getorganization(){
        return organization;
    }


    void printlL(){
        System.out.println(l);
        System.out.println(annual);
        System.out.println(l);
        System.out.println("###Name:"+name+"                             ###");
        System.out.println(l2);
        System.out.println(l);
        System.out.println("###Organization:"+organization+"             ###");
        System.out.println(l2);
        System.out.println(l);

    }
    }

【问题讨论】:

  • 您使用的是制表符还是空格?
  • 我正在处理空间
  • @S.Lott 为什么我把 //private String namespace = "###Name:"+name+" ###";我做 system.out.println(namespace);它打印出null?
  • @CuriousStudent。你知道//private string... 是评论吗?它什么都不做。

标签: java string null variable-assignment


【解决方案1】:

您需要为输出的最大宽度(以字符为单位)设置一个常数。然后你可以做一些简单的算术来计算出你需要多少空格/字符等来正确格式化你的输出。

说如果 max_width = 60。

这是一个标题: ############################################################(全60)

您可以根据要输出的字符串的字符长度来计算缩进和内容。

例如如果你想打印 Name: Simon 得到这个的长度并从 max_length 中减去等等。

HTH。

【讨论】:

  • 如何按照您描述的方式进行操作?我想在这个 public class Divers { public static void main(String args[]){ String format = "|%1$-10s|%2$-10s|%3$-20s| \n"; System.out.format(format, "FirstName", "Init.", "LastName"); System.out.format(format, "Real", "", "Gagnon"); System.out.format(format, "John", "D", "Doe");字符串 ex[] = { "约翰", "F.", "肯尼迪" }; System.out.format(String.format(format, (Object[])ex)); } }
  • 如果你不介意,你能告诉我怎么做吗?我将把我的代码修改为 .format 选项,但出于学习目的,我想学习你描述的方式。谢谢
  • 如果 StackOverflow 上有人为您编写代码,您将不会从这个实验练习中学到很多东西 ;-) 想想我和 @DerMike 的建议并尝试它。您拥有所需的所有基本信息。提示:使用 if/else 和 for 循环等低级结构来从练习中获得最大收益。祝你好运。
  • @5arx 我必须将其设置为变量,对吗?而不是这个 System.out.println("###Name:"+name+" ###");我必须写 private String namespace = "###Name:"+name+" ###";和 system.out.println(命名空间)?但是当我这样做时,名称似乎为空
  • 假设您将 int 'max_length' 设置为 60。 1. 因此,您使用 for 循环打印 '#' max_length 次数。这给了你你的页眉,最后,你的页脚。 2. 您有一个 int 来表示左右缩进的字符数 - 比如说 3。因此,对于您输出的每一行,您将有 3 个缩进 + 一个空格 + 名称或 org + 一个空格 + 3 个更多缩进。如果从 max_length 中减去它,您将获得在输出最终空格 + 行尾需要的 3 个缩进之前用右填充行所需的空格数。之类的东西。 HTH。
【解决方案2】:

仔细查看 String.format(...),尤其是 Formatter documentation。开始有点复杂,但它确实允许您打印具有固定长度的字符串(即用空格填充)。

您可能还会对 find this 页面有所帮助,该页面有几个工作示例(尽管您必须适应和修改相当多的内容)。

【讨论】:

    【解决方案3】:

    首先,您需要了解您的线路有多长。其次,您确定徽章内文本的长度。最后,动态插入空格以使行的长度相等。

    【讨论】:

    • 如果你不介意,你能告诉我怎么做吗?我将把我的代码修改为 .format 选项,但出于学习目的,我想学习你描述的方式。谢谢
    猜你喜欢
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多