web-dev-qa-db-ja.com

配列内の要素を文字列に連結する

私は少し混乱しています。私はどこでも答えを見つけることができませんでした;(

私は文字列配列を持っています:

String[] arr = ["1", "2", "3"];

次に、次の方法で文字列に変換します。

String str = Arrays.toString(arr);
System.out.println(str);

文字列"123"を取得する予定でしたが、代わりに文字列"[1,2,3]"を取得しました。

Javaでどうすればいいですか? Eclipse IDEを使用しています

33
Leo

StringBufferよりも高速であるため、StringBufferの代わりにStringBuilderを使用します

サンプルコード

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つの文字列を連結すると、新しい文字列オブジェクトが作成され、文字ごとのコピーが実行されます。
コードの複雑さは、配列のサイズの2乗のオーダーになることを意味します!

1+2+3+ ... nこれは反復ごとにコピーされる文字数です)。StringBuilderこの場合、「文字列へのコピー」は1回だけで、複雑さをO(n)に減らします。

53
Arrays.toString(arr);

出力は[1,2,3]であり、それをstringに保存します。出力して[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
17
Achintya Jha

簡単な答え:

Arrays.toString(arr);

17
Marco

Arrays.toString()関数を使用します。コードを短くして読みやすくします。内部で文字列ビルダーを使用するため、効率的です。余分な文字を削除するには、String.replace()関数を使用してそれらを削除することを選択できます。これにより、確かに読みやすくなります。

String str = Arrays.toString(arr).replaceAll(", |\\[|\\]", "");

これはTris Nefzgerの答えに似ていますが、角括弧を取り除くための長い部分文字列の構成はありません。

正規表現の説明:「|」 「、」、「[」、「]」のいずれかを意味します。 「\\」は、特殊文字(改行「\ n」やタブ「\ t」など)ではなく、実際のバックスラッシュ「\」を意味することをJava文字列に伝えます。そのため、「\\ [」の代わりに、正規表現インタープリターは「\ [」を読み取ります。これは、リテラル角括弧を意味し、正規表現言語の一部として使用したくないことを示します(たとえば、「[^ 3] * "は任意の数の文字を表しますが、いずれも" 3 "であってはなりません)。

6
cw'

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"};

6
Dukeling

Javaを1行で8通りに実行します。

String.join("", arr);

4
VHS

Guava には、この問題を解決するJoinerユーティリティがあります。

例:

String joinWithoutSeparator = Joiner.on("").join(1, 2, 3); // returns "123"
String joinWithSeparator = Joiner.on(",").join(1, 2, 3); // returns "1,2,3"
3
Tho

私は次のように書きました:

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

Guavaの Joiner の使用(r18では内部的にStringBuilderを使用)

String[]  arr= {"1","2","3"};
Joiner noSpaceJoiner = Joiner.on("");
noSpaceJoiner.join(arr))

Joinerはスレッドセーフで不変であり、コードを複製することなく多くの場所で再利用できるため便利です。私の意見では、より読みやすくなっています。


Java 8の Stream サポートを使用して、これを1行に減らすこともできます。

String concat = Stream.of(arr).collect(Collectors.joining());

この場合の出力は両方とも123です

2
mkobit

これは、文字列配列を[または]または,なしの文字列に変換する小さなコードです。

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の位置にテキストを取得します。
  • 3番目はすべての '、'を ""に置き換えます
2
DarckBlezzer

Springベースのプロジェクトの場合:

org.springframework.util.StringUtils.arrayToDelimitedString(Object [] arr、String delim)

Apache Commonsユーザーの場合、一連のNice結合メソッド:

org.Apache.commons.lang.StringUtils.join(Object [] array、char separator)

2
walv

Arrays.toStringは出力をフォーマットしています(括弧とコンマを追加)。独自のtoStringメソッドを実装する必要があります。

public String toString(String[] arr){
    String result = "";
    for(String s : arr)
        result+=s;
    return result;
}

[編集]ただし、Stringbuilderの方が優れています。上記を参照。

2
iGili

配列内のすべての要素を出力する一般的な方法 を見てください

要するに、Arrays.toString(arr)は、プリミティブ配列の内容を印刷する簡単な方法にすぎません。

1
Ben

オブジェクトクラスにはtoStringメソッドがあります。それを拡張する他のすべてのクラスはtoStringメソッドをオーバーライドするため、配列の場合もtoStringはこの方法でオーバーライドされます。そのため、自分の方法で出力したい場合は、希望する結果を得るための独自のメソッドを作成する必要があります。

str="";
for (Integer i:arr){
     str+=i.toString();
}

お役に立てれば

refer JavaのtoStringメソッドが配列に対して機能しないように思われる理由

0
Meherzad

Arrays.toString()を使用して、ストリング配列をストリングに変換できます。余分な文字は、正規表現を使用するか、単にreplaceメソッドを使用して削除できます。

Arrays.toString(strArray).replace(",", "").replace("[", "").replace("]", "");

Java 8は、文字列結合のための新しいメソッドを導入しましたpublic static String join(CharSequence delimiter、CharSequence ... elements)

String.join("", strArray);
0

これを行う方法を次に示します。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
0
user4322779

Javaを使用した例8。

  String[] arr = {"1", "2", "3"};
  String join = String.join("", arr);

それがお役に立てば幸いです

0
LittleBigUllah

Androidで開発する場合は、TextUtilsを使用してください。

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

ArrのタイプはString[] arr= {"1","2","3"};であると仮定します

出力は123になります

0
Fahmi Eshaq