将数组中的元素连接到字符串

Posted

技术标签:

【中文标题】将数组中的元素连接到字符串【英文标题】: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

【问题讨论】:

为什么不循环连接数组中的每个元素? @LGAP 这看起来不像。 我试过了,但可能没用 你为什么将整数值存储在字符串数组中? docs.oracle.com/javase/1.5.0/docs/api/java/util/… 【参考方案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】:

对于基于 Spring 的项目:

org.springframework.util.StringUtils.arrayToDelimitedString(Object[] arr, String delim)

对于 Apache Commons 用户,一组不错的连接方法:

org.apache.commons.lang.StringUtils.join(Object[] array, char separator)

【讨论】:

【参考方案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();

【讨论】:

以上是关于将数组中的元素连接到字符串的主要内容,如果未能解决你的问题,请参考以下文章

将 numpy 字符串数组连接到 numpy 数字数组

使用pyspark将两个字符串列值连接到整数数组

如何将组合框中的 SelectedIndex 连接到列表连接字符串?

在c中分配空间并连接到无符号字符数组

将字段值连接到 SQL Server 中的字符串

将列表中的项连接到字符串