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

时间:2013-02-19 12:51:00

标签: java arrays string converter

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

我有一个String数组:

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

然后我将它转换为字符串:

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

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

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

19 个答案:

答案 0 :(得分:53)

  

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)

答案 1 :(得分:17)

简单回答:

Arrays.toString(arr);

答案 2 :(得分:17)

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

答案 3 :(得分:6)

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"};

答案 4 :(得分:6)

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

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

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

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

答案 5 :(得分:3)

我刚刚写了以下内容:

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());
 }

答案 6 :(得分:3)

只需1行即可实现java 8:

String.join("", arr);

答案 7 :(得分:3)

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 :(得分:2)

答案 9 :(得分:2)

使用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

答案 10 :(得分:2)

这是一个将字符串数组转换为不包含[],

的字符串的小代码
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位置获取文本。
  • 第三个替换所有&#39;,&#39;与&#34;&#34;

答案 11 :(得分:2)

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

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

[编辑]尽管如此,Stringbuilder更好。见上文。

答案 12 :(得分:1)

看看generic method to print all elements in an array

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

答案 13 :(得分:0)

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

这是一个演示类:

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

答案 14 :(得分:0)

对象类有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 :(得分:0)

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

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

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

输出为123

答案 16 :(得分:0)

Arrays.toString()可用于将String Array转换为String。可以使用Regex表达式或仅使用替换方法删除多余的字符。

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

Java 8引入了String join的新方法 public static String join(CharSequence delimiter,CharSequence ... elements)

String.join("", strArray);

答案 17 :(得分:0)

使用Java 8的示例。

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

我希望有帮助

答案 18 :(得分:-1)

String newString= Arrays.toString(oldString).replace("[","").replace("]","").replace(",","").trim();