【问题标题】:How to create a String of an array如何创建数组的字符串
【发布时间】:2015-02-03 15:58:23
【问题描述】:

我正在尝试创建数组 {1, 2, 3, 4, 5, 6, 7} 的字符串,但运行它时似乎无法得到正确的答案。

int [] arr = {1, 2, 3, 4, 5, 6, 7};
String s = " ";

for(int i = 0; i < arr.length; i++){
  s = (arr[i] + ", ");
}

System.out.println(s);

我得到的答案是 7,而我实际上是想得到 1、2、3、4、5、6、7

有人可以向我解释为什么下面的代码给了我正确的答案,但是当我使用字符串时却没有,以及我应该如何更正上面的代码。

int [] arr = {1, 2, 3, 4, 5, 6, 7};

for(int i = 0; i < arr.length; i++){
  System.out.print(arr[i] + ", ");
}

【问题讨论】:

  • Arrays.toString() 怎么样?
  • 只需将= 替换为+=
  • 除了代码的技术调试之外,当您在循环中构造这样的字符串时,请改用StringBuilder。 Java String 对象是不可变的,创建和丢弃大量中间副本的成本很高; StringBuilder 可让您添加所需的所有字符,然后将其转换为 String
  • 根据关闭原因,投票关闭是一个错字
  • @Everv0id 也可以,谢谢,但由于我是编程新手,我试图远离内置代码

标签: java arrays string int


【解决方案1】:

您将在每次迭代 s = arr[i] + " " 时重新初始化 s,因此当循环完成时,s 将是数组中的最后一个值。

要将所有值添加到s,您必须使用+= 而不是=

例如s += String.valueOf(arr[i]) + " "

【讨论】:

  • 感谢您的解释,我没有意识到字符串是这样工作的。
  • @stargazer:完全正确,它不是这样工作的字符串。正是赋值运算符 '=' 以这种方式工作。
【解决方案2】:

你需要追加到你的字符串。也就是说,您需要在末尾添加另一个数字(使用+=),而不是只为每个数字重新分配字符串(使用=)。

for (int i = 0; i < arr.length; ++i){
    s += arr[i] + " ";
}

或者更简洁:

for (int n : arr) {
    s += n + " ";
}

或者,如果您不想被担心性能的人指责,请使用StringBuilder

StringBuilder sb = new StringBuilder();
for (int n : arr) {
    s.append(n).append(' ');
}
String s = sb.toString();

或者只是使用Arrays.toString(arr) 来完成整个事情。

【讨论】:

    【解决方案3】:

    将您的代码更改为:

    for(int i = 0; i < arr.length; i++){
      s += (arr[i] + " ");   <<---- you we're missing the '+' 
    }
    

    【讨论】:

      【解决方案4】:

      如果你使用s = (arr[i] + " ");,你会覆盖你的字符串。

      最好使用s += (arr[i] + " ");s = s.concat(arr[i] + " ");

      【讨论】:

        【解决方案5】:

        第一个代码的问题是 object s 在 for 循环的每次迭代中都被覆盖...这就是为什么它打印最后一个被覆盖的值 7 要打印您可以使用的所有值 s = s+(arr[i] + ", ");

        【讨论】:

          【解决方案6】:

          如果您希望每次从数组中获取值时都将其打印出来,则应将System.out.println(s); inside 放在for 循环中,而不是放在for 循环之后.如果您希望将其全部打印在一行中,那么您应该使用s.concat(arr[i] + ", ");。这会将数组中的值添加到字符串的末尾。

          【讨论】:

            【解决方案7】:

            基本上,对于您要查找的内容,只需将s = (arr[i] + ", "); 更改为s = s.concat(arr[i] + ", ");。这会给你一个清单,打印出来。为了使它看起来更好,您可以对字符串进行字符计数并使用子字符串删除最后一个逗号。

            我希望这会有所帮助。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-08-20
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-01-25
              • 2020-04-16
              • 2012-02-18
              相关资源
              最近更新 更多