34

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

我有一个字符串数组:

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

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

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

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

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

4

19 回答 19

56

使用StringBuilder而不是 StringBuffer,因为它比 StringBuffer 快

示例代码

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).

于 2013-02-19T12:54:29.627 回答
16
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
于 2013-02-19T12:52:57.943 回答
16

简单的回答:

Arrays.toString(arr);

于 2013-02-19T12:56:15.763 回答
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"};

于 2013-02-19T12:56:40.850 回答
6

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

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

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

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

于 2015-08-17T12:27:13.053 回答
4

仅用 1 行执行 java 8 方式:

String.join("", arr);

于 2017-09-20T19:29:51.703 回答
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"
于 2014-06-11T01:48:36.427 回答
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());
 }
于 2014-07-23T17:05:29.667 回答
2

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

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

[编辑] Stringbuilder 不过更好。往上看。

于 2013-02-19T12:56:32.957 回答
2

对于基于 Spring 的项目:

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

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

org.apache.commons.lang.StringUtils.join(Object[] 数组,字符分隔符)

于 2014-06-18T12:55:12.057 回答
2

使用番石榴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

于 2014-12-04T17:15:41.723 回答
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 位置获取文本。
  • 第三个用“”替换所有“,”
于 2016-09-15T21:58:57.237 回答
1

看看打印数组中所有元素的通用方法

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

于 2013-02-19T12:57:20.410 回答
0

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

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

希望这可以帮助

参考为什么java中的toString方法似乎不适用于数组

于 2013-02-19T12:57:07.760 回答
0

这是一种方法: 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
于 2014-12-04T16:52:31.937 回答
0

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

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

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

输出将是 123

于 2017-07-30T08:06:07.600 回答
0

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

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

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

String.join("", strArray);
于 2017-08-23T19:49:59.657 回答
0

使用 Java 8 的示例。

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

我希望这会有所帮助

于 2017-10-25T21:55:24.507 回答
-1
String newString= Arrays.toString(oldString).replace("[","").replace("]","").replace(",","").trim();
于 2017-10-25T02:28:48.840 回答