在Java中将字符串数组转换为字符串

在Java中将字符串数组转换为字符串,java,arrays,string,Java,Arrays,String,我需要用于将字符串数组转换为字符串的Java代码。尝试重载方法 或者,请尝试以下通用实现: public static void main(String... args) throws Exception { String[] array = {"ABC", "XYZ", "PQR"}; System.out.println(new Test().join(array, ", ")); } public <T> String join(T[] array, St

我需要用于将字符串数组转换为字符串的Java代码。

尝试重载方法

或者,请尝试以下通用实现:

public static void main(String... args) throws Exception {

    String[] array = {"ABC", "XYZ", "PQR"};

    System.out.println(new Test().join(array, ", "));
}

public <T> String join(T[] array, String cement) {
    StringBuilder builder = new StringBuilder();

    if(array == null || array.length == 0) {
        return null;
    }

    for (T t : array) {
        builder.append(t).append(cement);
    }

    builder.delete(builder.length() - cement.length(), builder.length());

    return builder.toString();
}
publicstaticvoidmain(String…args)引发异常{
字符串[]数组={“ABC”、“XYZ”、“PQR”};
System.out.println(新的Test().join(数组,“,”);
}
公共字符串联接(T[]数组,字符串连接){
StringBuilder=新的StringBuilder();
if(array==null | | array.length==0){
返回null;
}
for(T:array){
建筑商。附加(t)。附加(水泥);
}
delete(builder.length()-cement.length(),builder.length());
返回builder.toString();
}
使用Apache commons。它将数组作为参数(并且对
Iterable
Iterator
参数具有重载),并对每个元素调用
toString()
(如果它不为null)以获得每个元素的字符串表示。然后,如果指定了一个字符串,则每个元素字符串表示形式将被连接到一个字符串中,中间带有分隔符:

String joinedString = StringUtils.join(new Object[]{"a", "b", 1}, "-");
System.out.println(joinedString);
产生:

a-b-1

您可以这样做,给定一个基元类型的数组
a

StringBuffer result = new StringBuffer();
for (int i = 0; i < a.length; i++) {
   result.append( a[i] );
   //result.append( optional separator );
}
String mynewstring = result.toString();
StringBuffer结果=新建StringBuffer();
for(int i=0;i
您需要从arrayList生成字符串的代码

Iterate through all elements in list and add it to your String result
您可以通过两种方式完成此操作:使用字符串作为结果或StringBuffer/StringBuilder

示例:

String result = "";
for (String s : list) {
    result += s;
}
…但由于性能原因,这不是一个好的做法。更好的方法是使用(线程安全)或更适合添加字符串的方法,例如:

Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");
将生成与以下内容相同的字符串:

new String("Harry, Ron, Hermione");
ETA:Java 8现在也有类似的支持:

String.join(", ", "Harry", "Ron", "Hermione");
看不到对跳过空值的支持,但这很容易解决。

Java8+ 使用
String.join()

请注意,
arr
也可以是任何
Iterable
(例如列表),而不仅仅是数组

如果您有
,则可以使用加入收集器:

Stream.of("a", "b", "c")
      .collect(Collectors.joining(","))
遗留(Java7及更早版本) 或者,如果您只需要阵列的“调试样式”转储:

String str = Arrays.toString(arr);
请注意,如果您是真正的遗留(Java 1.4及更早版本),则需要将
StringBuilder
替换为
StringBuffer

安卓 使用
TextUtils.join()

一般说明 您可以根据字符串之间需要的字符(如果有)修改上述所有示例

不要使用字符串,只需在循环中将+=附加到它,就像这里显示的一些答案一样。这会发送GC,因为创建和丢弃的字符串对象数量与数组中的项目数量相同。对于小型阵列,您可能不会真正注意到差异,但对于大型阵列,它可能会慢几个数量级。

试试这种方法

返回指定内容的“深层内容”的字符串表示形式 数组。如果数组包含其他数组作为元素,则字符串 表示包含其内容等。这种方法是可行的
设计用于将多维数组转换为字符串

如果您知道数组有多少元素,一种简单的方法是:

String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3]; 
String[]strings=新字符串[25000];
对于(inti=0;i<25000;i++)字符串[i]=“1234567”;
字符串结果;
结果=”;
对于(字符串s:strings)结果+=s;
//线性+:5s
结果=”;
for(String s:strings)result=result.concat(s);
//线性。浓度:2.5s
结果=String.join(“,strings);
//java8.join:3ms
公共字符串联接(字符串分隔符,字符串[]s)
{
int ls=s.长度;
开关(ls)
{
案例0:返回“”;
案例1:返回s[0];
案例2:返回s[0]。concat(分隔符)。concat(s[1]);
违约:
int l1=ls/2;
字符串[]s1=Arrays.copyOfRange(s,0,l1);
String[]s2=Arrays.copyOfRange(s、l1、ls);
返回join(分隔符,s1).concat(分隔符).concat(连接(分隔符,s2));
}
}
结果=连接(“,字符串);
//分而治之连接:7毫秒
如果您没有选择权,只能使用Java 6或7,那么您应该使用分治连接。

下面是数组到字符串转换的示例。
从Java 8中,我认为最简单的方法是:

String array[]={"one","two"};
String s="";

for(int i=0;i<array.length;i++)
{
  s=s+array[i];
}

System.out.print(s);
这样,您可以选择任意分隔符。

字符串数组[]={“一”、“二”};
String[] stringArray = {"a","b","c"};
StringUtils.join(stringArray, ",");
字符串s=“”; 对于(inti=0;i使用ApacheCommons的连接方法

    //Deduplicate the comma character in the input string
    String[] splits = input.split("\\s*,\\s*");
    return Arrays.stream(splits).filter(StringUtils::isNotBlank).collect(Collectors.joining(", "));

当我们使用流时,我们确实有更多的灵活性,比如
映射-->将任何数组对象转换为toString
过滤器-->为空时删除
联接-->添加联接字符


什么类型的数组?字符串数组?
array.toString()
?更具体一点。@princeeysuraj,官方答案由adarshr提供。如果你想要自己的分隔符,你可以试试JoeSlav的答案,如果没有线程问题,你可以使用StringBuilder而不是StringBuffer来提高效率。krock的答案很好,但在我看来有点过分了。然后告诉我们你想要的格式。其他erwise,我们猜不出你在想什么。StringBuffer很旧,请改用StringBuilder,它不需要在一个线程中使用不必要的同步。但是如果我们是真实的情节,
null
将是“谁的名字不能被提及”:-,如果你勇敢:;-)<代码>Joiner.on(“,”).useForNull(“伏地魔”).join(“哈利”,null,“罗恩”,“赫敏”)使用java-8
String.join(“,”,“Harry”,null,“Ron”,“Hermione”).replaceAll(“null”,“Voldermart”)次要修复:joinedString=StringUtils.join(新对象[]{“a”、“b”、“1”},“-”;这在现实世界中几乎不适用,并且显示了一些糟糕的编程实践。如果能获得50个否定项的金牌,那将是一件非常棒的事情。感谢您解释为什么StringBuilder优于
String[] strings = new String[25000];
for (int i = 0; i < 25000; i++) strings[i] = '1234567';

String result;
result = "";
for (String s : strings) result += s;
//linear +: 5s

result = "";
for (String s : strings) result = result.concat(s);
//linear .concat: 2.5s

result = String.join("", strings);
//Java 8 .join: 3ms

Public String join(String delimiter, String[] s)
{
    int ls = s.length;
    switch (ls)
    {
        case 0: return "";
        case 1: return s[0];
        case 2: return s[0].concat(delimiter).concat(s[1]);
        default:
            int l1 = ls / 2;
            String[] s1 = Arrays.copyOfRange(s, 0, l1); 
            String[] s2 = Arrays.copyOfRange(s, l1, ls); 
            return join(delimiter, s1).concat(delimiter).concat(join(delimiter, s2));
    }
}
result = join("", strings);
// Divide&Conquer join: 7ms
public class ArrayToString {
public static void main(String[] args) { String[] strArray = new String[]{"Java", "PHP", ".NET", "PERL", "C", "COBOL"};

        String newString = Arrays.toString(strArray);

        newString = newString.substring(1, newString.length()-1);

        System.out.println("New New String: " + newString);
    }
}
    String[] array = { "cat", "mouse" };
    String delimiter = "";
    String result = String.join(delimiter, array);
String array[]={"one","two"};
String s="";

for(int i=0;i<array.length;i++)
{
  s=s+array[i];
}

System.out.print(s);
String[] stringArray = {"a","b","c"};
StringUtils.join(stringArray, ",");
    //Deduplicate the comma character in the input string
    String[] splits = input.split("\\s*,\\s*");
    return Arrays.stream(splits).filter(StringUtils::isNotBlank).collect(Collectors.joining(", "));