我有点困惑。我无法在任何地方找到答案 ;(
我有一个字符串数组:
String[] arr = ["1", "2", "3"];
然后我通过以下方式将其转换为字符串:
String str = Arrays.toString(arr);
System.out.println(str);
我本希望得到字符串 "123"
,但我得到了字符串 "[1,2,3]"
。
在Java中该怎么做呢?我正在使用Eclipse IDE。
我有点困惑。我无法在任何地方找到答案 ;(
我有一个字符串数组:
String[] arr = ["1", "2", "3"];
然后我通过以下方式将其转换为字符串:
String str = Arrays.toString(arr);
System.out.println(str);
我本希望得到字符串 "123"
,但我得到了字符串 "[1,2,3]"
。
在Java中该怎么做呢?我正在使用Eclipse IDE。
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)
。
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
String.join("", arr);
Arrays.toString:(至少对于其Object []
版本来说,来自API)
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
检查无关紧要。还要注意,检查i == iMax
是一种非常,非常快速的操作(而且您需要检查以确定for循环的结束方式,在任何情况下都可能存在;请注意,for循环看起来不像这样: for(int i = 0; i!= iMax; i ++)
)。 - Bernhard BarkerString str = Arrays.toString(arr).replaceAll(", |\\[|\\]", "");
这与Tris Nefzger的答案类似,但不需要冗长的子字符串构造来摆脱方括号。
正则表达式的解释:"|"表示任何", "和"["以及"]"。 "\\"告诉Java字符串我们不是指一些特殊字符(如换行符"\n"或制表符"\t"),而是一个真正的反斜杠"\"。因此,Regex解释器读取"\[",它告诉它我们指的是一个字面上的方括号,而不想将其用作Regex语言的一部分(例如,"[^3]*"表示任意数量的字符,但它们都不应该是"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"
我刚刚写了以下内容:
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
上使用 +
。 - PatrickJoiner
(在 r18 中内部使用 StringBuilder
)String[] arr= {"1","2","3"};
Joiner noSpaceJoiner = Joiner.on("");
noSpaceJoiner.join(arr))
Stream
支持,我们还可以将其简化为一行代码。String concat = Stream.of(arr).collect(Collectors.joining());
123
。这是一个将字符串数组转换为字符串的小代码,不包含 [
或 ]
或 ,
String[] strArray = new String[]{"Java", "String", "Array", "To", "String", "Example"};
String str = Arrays.toString(strArray);
str = str.substring(1, str.length()-1).replaceAll(",", "");