将数组中的元素连接到字符串
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();
【讨论】:
以上是关于将数组中的元素连接到字符串的主要内容,如果未能解决你的问题,请参考以下文章