Java 将数组中的元素连接到字符串
我有点困惑。我到处都找不到答案;( 我有一个字符串数组:Java 将数组中的元素连接到字符串,java,arrays,string,converter,Java,Arrays,String,Converter,我有点困惑。我到处都找不到答案;( 我有一个字符串数组: String[] arr = ["1", "2", "3"]; 然后我通过以下方式将其转换为字符串: String str = Arrays.toString(arr); System.out.println(str); 我希望得到字符串“123”,但是我得到了字符串“[1,2,3]” 我如何用java实现它?我使用的是EclipseIDE Arrays.toString(arr); 输出为[1,2,3],您将其存储到字符串中。然后
String[] arr = ["1", "2", "3"];
然后我通过以下方式将其转换为字符串:
String str = Arrays.toString(arr);
System.out.println(str);
我希望得到字符串“123”
,但是我得到了字符串“[1,2,3]”
我如何用java实现它?我使用的是EclipseIDE
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[]strArr={“1”、“2”、“3”};
StringBuilder strBuilder=新StringBuilder();
对于(int i=0;i
这就是为什么这是使用字符串串联的更好解决方案:当您串联2个字符串时,将创建一个新的字符串对象并执行逐字符复制。实际上意味着代码复杂性将是数组大小的平方的顺序 (
1+2+3+…n
是每次迭代复制的字符数)。
StringBuilder将只执行一次“复制到字符串”,在这种情况下,将复杂性降低到O(n)
简单回答:
Arrays.toString(arr);
Arrays.toString正在格式化输出(添加括号和逗号)。您应该实现自己的toString方法
public String toString(String[] arr){
String result = "";
for(String s : arr)
result+=s;
return result;
}
[编辑]Stringbuilder更好。请参见上文。数组。toString:(从API,至少对于
对象[]
版本)
这意味着它在开始处插入[
,在结束处插入]
,在元素之间插入,
如果您希望它不包含这些字符:(StringBuilder比下面的要快,但它不能是少量的代码)
旁注:
String[]arr[3]=[1,2,3]
将无法编译
大概您想要:
String[]arr={“1”、“2”、“3”};
对象类有toString方法。扩展它的所有其他类都会重写toString方法,因此在for数组中,toString也会以这种方式被重写。因此,如果您希望以自己的方式输出,则需要创建自己的方法,通过该方法可以获得所需的结果
str="";
for (Integer i:arr){
str+=i.toString();
}
希望这有帮助
请参阅
但简而言之,Arrays.toString(arr)只是打印primative数组内容的一种简单方法。具有Joiner实用程序来解决此问题:
例如:
String joinWithoutSeparator = Joiner.on("").join(1, 2, 3); // returns "123"
String joinWithSeparator = Joiner.on(",").join(1, 2, 3); // returns "1,2,3"
对于基于Spring的项目: 对于Apache Commons用户,提供了一组好的连接方法:
我刚刚写了以下内容:
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());
}
以下是一种方法:
数组.toString(数组).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
使用番石榴(r18内部使用StringBuilder
)
Joiner
非常有用,因为它是线程安全的、不可变的,可以在许多地方重用,而无需重复代码。在我看来,它也更具可读性
使用Java8的支持,我们还可以将其简化为一行程序
String concat = Stream.of(arr).collect(Collectors.joining());
本例中的两个输出都是123
使用Arrays.toString()函数。它使代码保持简短易读。它在内部使用字符串生成器,因此也很有效。要消除多余的字符,可以选择使用string.replace()来消除它们函数,不可否认,它再次降低了可读性
String str = Arrays.toString(arr).replaceAll(", |\\[|\\]", "");
这与Tris Nefzger的答案类似,但没有长时间的子字符串构造来摆脱方括号
正则表达式的解释:“|”是指“、[”和“]”中的任何一种。
“\\”告诉Java字符串,我们指的不是某个特殊字符(如新行“\n”或制表符“\t”),而是一个真正的反斜杠“\”。
因此,Regex解释器读取“\\[”,而不是“\\[”,这告诉它我们指的是一个文本方括号,不想将其用作Regex语言的一部分(例如,“[^3]*”表示任意数量的字符,但它们都不应该是“3”)。这是一段将字符串数组转换为字符串而不使用
[
或]
或,
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位置获取文本
- 第三,将所有“,”替换为“”
String items = TextUtils.join("", arr);
假设arr的类型为String[]arr={“1”、“2”、“3”};
输出将是123个数组。toString()可用于将字符串数组转换为字符串。可以使用正则表达式或简单地使用replace方法删除多余的字符
Arrays.toString(strArray).replace(",", "").replace("[", "").replace("]", "");
Java8引入了新的字符串连接方法
公共静态字符串联接(CharSequence分隔符、CharSequence…元素)
只需一行,就可以用java 8种方式完成:
String.join(“,arr);
使用Java8的示例
String[] arr = {"1", "2", "3"};
String join = String.join("", arr);
< P> >我希望有助于为什么不循环和连接数组中的每个元素?@ LGAP看起来不是这样。我已经尝试过了,但它在5月份没有工作,为什么要在字符串数组中存储整数值呢?答案只提供代码片段不是很有帮助。请考虑添加一些注释或简要解释它所做的事情。这仍然是最好的答案,因为其他人使用字符串连接使用StringBuilder而不是StringBuffer。StringBuffer是线程安全的,在本例中不需要。+1是迄今为止我尝试过的最快的解决方案!@walv感谢walv的伟大建议,我修改了我的答案:)如果你连接的字符串非常大,那么你应该uldn't ask i==iMax?在每次迭代中!只需始终添加一个分隔符,然后在循环后删除最后一个分隔符!@Sauer注意,第一个代码示例不是我自己编写的,它是从Java直接复制和粘贴的
String[] strArray = new String[]{"Java", "String", "Array", "To", "String", "Example"};
String str = Arrays.toString(strArray);
str = str.substring(1, str.length()-1).replaceAll(",", "");
String items = TextUtils.join("", arr);
Arrays.toString(strArray).replace(",", "").replace("[", "").replace("]", "");
String.join("", strArray);
String newString= Arrays.toString(oldString).replace("[","").replace("]","").replace(",","").trim();
String[] arr = {"1", "2", "3"};
String join = String.join("", arr);