【问题标题】:Concatenating elements in an array to a string将数组中的元素连接到字符串
【发布时间】:2013-02-04 03:53:44
【问题描述】:

我有点困惑。我在任何地方都找不到答案;(

我有一个字符串数组:

String[] arr = ["1", "2", "3"];

然后我通过以下方式将其转换为字符串:

String str = Arrays.toString(arr);
System.out.println(str);

我希望得到字符串"123",但我得到了字符串"[1,2,3]"

我怎么能在java中做到这一点?我正在使用 Eclipse IDE

【问题讨论】:

标签: java arrays string converter


【解决方案1】:

Use StringBuilder instead of StringBuffer, because it is faster than StringBuffer.

Sample code

String[] strArr = {"1", "2", "3"};
StringBuilder strBuilder = new StringBuilder();
for (int i = 0; i < strArr.length; i++) {
   strBuilder.append(strArr[i]);
}
String newString = strBuilder.toString();

这就是为什么这是使用字符串连接的更好解决方案的原因:当您连接 2 个字符串时,会创建一个新的字符串对象并执行逐个字符的复制。
实际上意味着代码复杂性将是数组大小的平方的顺序!

1+2+3+ ... n 是每次迭代复制的字符数)。 StringBuilder 在这种情况下只会执行一次“复制到字符串”,从而将复杂性降低到O(n)

【讨论】:

  • 只提供代码 sn-p 的答案不是很有帮助。请考虑添加一些 cmets 或简要解释它的作用。 :)
  • 这仍然是最好的答案,因为其他人使用字符串连接
  • 使用 StringBuilder 代替 StringBuffer。 StringBuffer 是线程安全的,在本例中不需要。
  • +1 是我迄今为止尝试过的最快的解决方案!
  • @walv 谢谢你的好建议,我已经修改了我的答案:)
【解决方案2】:

简单回答:

Arrays.toString(arr);

【讨论】:

  • Arrays.toString(arr) 给出的结果类似于 [1,2,3]。他不需要这种格式
【解决方案3】:
Arrays.toString(arr);

输出是 [1,2,3] 并且你将它存储到你的字符串中。并打印出来,以便得到输出 [1,2,3]。

如果你想得到输出 123,试试这个:

public static void main(String[] args) {
    String[] arr= {"1","2","3"};
    String output ="";
    for(String str: arr)
        output=output+str;
    System.out.println(output);


}

输出:

123

【讨论】:

  • 请不要连接字符串,使用 StringBuilder/Buffer 或任何合适的。
  • 我不敢相信 13 个人实际上同意字符串连接?!我想加倍 Radek - 改用 StringBuilder
【解决方案4】:

Arrays.toString:(来自 API,至少对于它的 Object[] 版本)

public static String toString(Object[] a) {
    if (a == null)
        return "null";
    int iMax = a.length - 1;
    if (iMax == -1)
        return "[]";

    StringBuilder b = new StringBuilder();
    b.append('[');
    for (int i = 0; ; i++) {
        b.append(String.valueOf(a[i]));
        if (i == iMax)
            return b.append(']').toString();
        b.append(", ");
    }
}

这意味着它在开头插入[,在结尾插入],在元素之间插入,

如果你想要没有那些字符:(StringBuilder比下面的要快,但不能是少量的代码)

String str = "";
for (String i:arr)
  str += i;
System.out.println(str);

旁注:

String[] arr[3]= [1,2,3] 不会编译。

大概你想要:String[] arr = {"1", "2", "3"};

【讨论】:

  • 如果你要连接非常大的字符串,那么你不应该问 i == iMax?在每次迭代中!只需添加一个分隔符,然后在循环后删除最后一个分隔符!
  • @Sauer 请注意,第一个代码示例不是我自己编写的,它是从 Java API 直接复制和粘贴的。你的意思是一个非常大的数组?对于i == iMax 检查,字符串的大小无关紧要。另请注意,检查i == iMax 是一个真的真的快速操作(并且您需要检查以确定for循环的结束以哪种方式,所以它可能也在那里;注意 for 循环 not 看起来像这样:for (int i = 0; i != iMax; i++))。
【解决方案5】:

使用 Arrays.toString() 函数。它使您的代码简短易读。它在内部使用字符串生成器,因此它也很有效。为了消除多余的字符,您可以选择使用 String.replace() 函数来消除它们,这无疑会再次降低可读性。

String str = Arrays.toString(arr).replaceAll(", |\\[|\\]", "");

这类似于 Tris Nefzger 的答案,但没有冗长的子字符串构造来摆脱方括号。

正则表达式的解释:“|”表示“、”和“[”和“]”中的任何一个。 "\\" 告诉 Java 字符串,我们不是指某个特殊字符(如换行符“\n”或制表符“\t”),而是真正的反斜杠“\”。 因此,Regex 解释器读取的不是“\\[”,而是“\[”,这告诉它我们的意思是字面方括号,并且不想将其用作 Regex 语言的一部分(例如,“[^3] *”表示任意数量的字符,但它们都不应该是“3”)。

【讨论】:

    【解决方案6】:

    只需 1 行就可以使用 java 8 方式:

    String.join("", arr);

    【讨论】:

      【解决方案7】:

      Guava 有 Joiner 实用程序来解决这个问题:

      例子:

      String joinWithoutSeparator = Joiner.on("").join(1, 2, 3); // returns "123"
      String joinWithSeparator = Joiner.on(",").join(1, 2, 3); // returns "1,2,3"
      

      【讨论】:

        【解决方案8】:

        我刚刚写了以下内容:

        public static String toDelimitedString(int[] ids, String delimiter)
        {
            StringBuffer strb = new StringBuffer();
            for (int id : ids)
            {
              strb.append(String.valueOf(id) + delimiter);
            }
            return strb.substring(0, strb.length() - delimiter.length());
         }
        

        【讨论】:

        • 由于您不需要并发,因此通常建议使用 StringBuilder 而不是 StringBuffer。另外,循环的主体应该是strb.append(String.valueOf(id)).append(delimiter);,以便完全避免String上的+
        【解决方案9】:

        Arrays.toString 正在格式化输出(添加了括号和逗号)。你应该实现你自己的 toString 方法。

        public String toString(String[] arr){
            String result = "";
            for(String s : arr)
                result+=s;
            return result;
        }
        

        [edit] 不过 Stringbuilder 更好。见上文。

        【讨论】:

          【解决方案10】:

          【讨论】:

            【解决方案11】:

            使用 Guava 的 Joiner(在 r18 内部使用 StringBuilder

            String[]  arr= {"1","2","3"};
            Joiner noSpaceJoiner = Joiner.on("");
            noSpaceJoiner.join(arr))
            

            Joiner 很有用,因为它是线程安全且不可变的,并且可以在许多地方重用,而无需复制代码。在我看来,它也更具可读性。


            使用 Java 8 的 Stream 支持,我们还可以将其简化为单行。

            String concat = Stream.of(arr).collect(Collectors.joining());
            

            在这种情况下,两个输出都是123

            【讨论】:

              【解决方案12】:

              这是将字符串数组转换为不带[],的字符串的小代码

              String[] strArray = new String[]{"Java", "String", "Array", "To", "String", "Example"};
              
              String str = Arrays.toString(strArray);
                          str = str.substring(1, str.length()-1).replaceAll(",", "");
              
              • 首先将数组转换为字符串。
              • 第二次从 x 到 y 位置获取文本。
              • 第三次将所有 ',' 替换为 ""

              【讨论】:

                【解决方案13】:

                看看generic method to print all elements in an array

                但简而言之,Arrays.toString(arr) 只是打印原始数组内容的一种简单方法。

                【讨论】:

                • 重要的是要注意Arrays.toString(arr) 不会自己打印数组...它只提供要打印的字符串
                【解决方案14】:

                Object 类有 toString 方法。扩展它的所有其他类都覆盖了 toString 方法,因此在数组中 toString 也以这种方式被覆盖。因此,如果您希望以您自己的方式输出,您需要创建自己的方法来获得所需的结果。

                str="";
                for (Integer i:arr){
                     str+=i.toString();
                }
                

                希望对你有帮助

                参考Why does the toString method in java not seem to work for an array

                【讨论】:

                  【解决方案15】:

                  这是一种方法: Arrays.toString(array).substring(1,(3*array.length-1)).replaceAll(", ","");

                  这是一个演示类:

                  package arraytostring.demo;
                  
                  import java.util.Arrays;
                  
                  public class Array2String {
                  
                          public static void main(String[] args) {
                  
                                  String[] array = { "1", "2", "3", "4", "5", "6", "7" };
                                  System.out.println(array2String(array));
                                  // output is: 1234567
                          }
                  
                          public static String array2String(String[] array) {
                  
                                  return Arrays.toString(array).substring(1, (3 * array.length - 1))
                                                  .replaceAll(", ", "");
                  
                          }
                  
                  }
                  

                  Scala 让这一切变得更简单、更干净、更安全:

                  scala> val a = Array("1", "2", "3")
                  a: Array[String] = Array(1, 2, 3)
                  
                  scala> val aString = a.mkString
                  aString: String = 123
                  
                  scala> println(aString)
                  123
                  

                  【讨论】:

                    【解决方案16】:

                    对于那些使用 Android 开发的人,请使用 TextUtils。

                    String items = TextUtils.join("", arr);
                    

                    假设 arr 的类型为 String[] arr= {"1","2","3"};

                    输出将是 123

                    【讨论】:

                      【解决方案17】:

                      使用 Java 8 的示例。

                        String[] arr = {"1", "2", "3"};
                        String join = String.join("", arr);
                      

                      希望对你有帮助

                      【讨论】:

                      • 你需要把are改成arr
                      【解决方案18】:

                      Arrays.toString() 可用于将字符串数组转换为字符串。多余的字符可以使用 Regex 表达式或简单地使用 replace 方法删除。

                      Arrays.toString(strArray).replace(",", "").replace("[", "").replace("]", "");
                      

                      Java 8 引入了新的字符串连接方法 public static String join(CharSequence delimiter, CharSequence...元素)

                      String.join("", strArray);
                      

                      【讨论】:

                        【解决方案19】:
                        String newString= Arrays.toString(oldString).replace("[","").replace("]","").replace(",","").trim();
                        

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2017-04-20
                          • 1970-01-01
                          • 1970-01-01
                          • 2019-03-09
                          • 1970-01-01
                          • 1970-01-01
                          • 2014-11-04
                          • 1970-01-01
                          相关资源
                          最近更新 更多