web-dev-qa-db-ja.com

Javaで文字列の配列を文字列に変換する

文字列の配列を文字列に変換するためのJavaコードが必要です。

199
Princeyesuraj

配列の「デバッグ形式」のダンプがほしい場合は、次のようにします。

String str = Arrays.toString(arr);

または、より多くの制御のために(Java 8以前):

StringBuilder builder = new StringBuilder();
for(String s : arr) {
    builder.append(s);
}
String str = builder.toString();

(Java 8以上):

String str = String.join(",", arr);

あなたがAndroidの角度から来ているなら、そして:

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

もしあれば、どの文字が文字列の間にあるかに応じて上記を変更することができます。

Java 8より前のコードとほぼ同じコードが表示されることがありますが、StringBuffer - StringBuilderはスレッドセーフではない新しいクラスですが、不要な同期がなくなるため、シングルスレッドでパフォーマンスが向上します。一言で言えば、99%のケースでStringBuilderを使用した方がいいです - 機能的には、2つは同一です。

DON'T 文字列を使用して、ここに示す回答の一部のように+ =を付けて追加するだけです。これは、配列内の項目数と同じ数の文字列オブジェクトを作成して捨てているため、ルーフを通してGCを送信します。小さい配列の場合は違いに気付かないかもしれませんが、大きい配列の場合は桁違いに遅くなる可能性があります。

401
Michael Berry

Apacheのcommons StringUtils.join() を使います。これはパラメータとして配列を取り(そしてIterableIteratorパラメータにもオーバーロードを持ちます))各要素に対してtoString()を呼び出し(それがnullでない場合)、各要素文字列表現を取得します。次に、文字列表現が指定されている場合は、間にセパレータを挟んで1つの文字列に結合されます。

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

を生成します。

a-b-1
101
krock

私は GoogleのGuava Joiner を使うのが好きです。

Joiner.on(", ").skipNulls().join("Harry", null, "Ron", "Hermione");

以下と同じStringを生成します。

new String("Harry, Ron, Hermione");

ETA:Java 8は現在同様のサポートをしています。

String.join(", ", "Harry", "Ron", "Hermione");

Null値をスキップすることはサポートされていませんが、簡単に回避できます。

35
rich

プリミティブ型の配列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();
13
JoeSlav

Java 8から、私が考える最も簡単な方法は次のとおりです。

    String[] array = { "cat", "mouse" };
    String delimiter = "";
    String result = String.join(delimiter, array);

これにより、任意の区切り文字を選択できます。

12
Midiparse

Arrays.deepToString メソッドを試してください。

指定された配列の「深い内容」の文字列表現を返します。配列に他の配列が要素として含まれている場合、文字列表現にはその内容などが含まれます。このメソッドは多次元配列を文字列に変換するために設計されています

9
SANN3

Arrays.toString オーバーロードメソッドを試してください。

あるいは、以下の一般的な実装を試してください。

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();
}
7
adarshr

以下は、配列から文字列への変換の例です。

パブリッククラス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);
    }
}

3
parag.rane
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

Java 6または7を使用する以外に選択項目がない場合は、Divide&Conquer joinを使用してください。

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

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

System.out.print(s);
0
Vikram

Apache Commonsの StringUtils library のjoinメソッドを使用してください。

String[] stringArray = {"a","b","c"};
StringUtils.join(stringArray, ",");
0
Taner

ArrayListから文字列を生成するコードが欲しいです。

Iterate through all elements in list and add it to your String result

これには2つの方法があります。結果としてStringを使用する方法とStringBuffer/StringBuilderを使用する方法です。

例:

String result = "";
for (String s : list) {
    result += s;
}

...しかしパフォーマンス上の理由からこれは良い習慣ではありません。 StringBuffer (スレッドセーフ)または StringBuilder を使用したほうがよい

0
smas