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


241

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


どのような配列ですか?文字列の配列?
adarshr

2
array.toString()?具体的に。
スタンクリリン

1
@Princeyesuraj、公式の回答はadarshrによって提供されます。あなたは自分の区切りが必要な場合は、試すことができJoeSlavの答えを、無スレッドの問題ならば、あなたは使用することができるのStringBuilderを代わりにStringBufferの effiencyのために。krockの答えは良いですが、私の意見では少しやりすぎです。
ダンテ5

回答:


469

配列の「デバッグ形式」のダンプが必要な場合:

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はスレッドセーフではない新しいクラスですが、不要な同期がなくなるため、単一スレッドでのパフォーマンスが向上します。つまり、StringBuilder99%のケースで使用した方がよい-機能的には、2つは同じです。

しないでくださいと、それにだけAPPEND文字列を使用し、+ =の答えのいくつかは、ここで示したように。これは、配列内のアイテムと同じ数の文字列オブジェクトを作成して破棄するため、GCを屋根から送信します。小さな配列の場合は違いに気付かないかもしれませんが、大きな配列の場合は桁違いに遅くなることがあります。


13
なぜStringBuilderが追加のために+ =より優れているかについての説明をありがとう。
ニコラスミラー、

5
カバーの下で+ =を使用すると、JavaはそれをStringBuilderを使用するように変換します。
Javamann

6
@matteo、使用する必要Arrays.toString(yourArray);がありますが、使用したと思いますyourArray.toString();
Dzarafata

5
Javaの1.8場合String::joinは、forループの代わりにも使用できます。String.join("", arr);
Jorn Vernee、2016

2
Android開発者は、次のような文字列を使用できます。result = TextUtils.join( "、"、list); stackoverflow.com/questions/33802971/...
ラーフルHawge

102

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

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

生成する:

a-b-1

1
マイナーな修正:joinedString = StringUtils.join(new Object [] {"a"、 "b"、 "1"}、 "-");
クエストボーン2012年

35

私はこれのためにGoogleのGuava Joinerを使うのが好きです、例えば:

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

次と同じ文字列を生成します。

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

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

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

null値のスキップのサポートはありませんが、簡単に回避できます。


10
しかし、もし私たちが陰謀に忠実であったnullなら、「彼の名前は言及されてはならない彼」でしょう:-)
スティーブンC

22
勇気がある場合:;-)Joiner.on(", ").useForNull("Voldemort").join("Harry", null, "Ron", "Hermione");
リッチな

java-8の使用String.join(", ", "Harry", null, "Ron", "Hermione").replaceAll("null", "Voldermart");
Cjo

13

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

23
StringBufferは古く、代わりに1つのスレッドで使用するために不要な同期を行わないStringBuilderを使用してください。
Jason S

13

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

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

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


10

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

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


あなたが多くの制御を必要としないなら、私はあなたがサードパーティのlibを必要としないので、これが最も簡単な解決策であると私は信じています。次に例を示します。System.out.println(Arrays.deepToString(args));
2016年

7

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

次に、探しているフォーマットをお知らせください。そうでなければ、私たちはあなたが何を考えているのか推測できません。
Jason S

3

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

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


1
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結合を使用する必要があります。


0

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の文字列を追加することがより適切です



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

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

System.out.print(s);

1
あなたの答えは基本的にsmasと同じです。もう少し複雑です。したがって、「最も簡単な」ものではありません。さらに、Arrays.toString()はさらに簡単です。
GhostCat 2016

-22

配列の要素数がわかっている場合、簡単な方法は次のとおりです。

String appendedString = "" + array[0] + "" + array[1] + "" + array[2] + "" + array[3]; 

10
これは現実の世界ではほとんど適用できず、いくつかの悪いプログラミング慣行を示しています。
Jk1 2013

3
マイナス50を達成するのに最適な金メダル
Pablo Cegarra 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.