34

少し混乱しています。どこにも答えが見つかりませんでした;(

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

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

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

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

string を取得することを期待していましたが、代わり"123"に string を取得しました。"[1,2,3]"

どうすればJavaでそれを行うことができますか? 私はEclipse IDEを使用しています

4

19 に答える 19

56

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).

于 2013-02-19T12:54:29.627 に答える
16
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
于 2013-02-19T12:52:57.943 に答える
16

簡単な答え:

Arrays.toString(arr);

于 2013-02-19T12:56:15.763 に答える
6

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

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

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

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

于 2015-08-17T12:27:13.053 に答える
6

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

于 2013-02-19T12:56:40.850 に答える
3

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

例:

String joinWithoutSeparator = Joiner.on("").join(1, 2, 3); // returns "123"
String joinWithSeparator = Joiner.on(",").join(1, 2, 3); // returns "1,2,3"
于 2014-06-11T01:48:36.427 に答える
3

私はちょうど次のように書いています:

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());
 }
于 2014-07-23T17:05:29.667 に答える
2

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

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

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

于 2013-02-19T12:56:32.957 に答える
2

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

于 2014-12-04T17:15:41.723 に答える
1

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

要するに、Arrays.toString(arr) はプリミティブ配列の内容を出力する簡単な方法です。

于 2013-02-19T12:57:20.410 に答える
0

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

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

お役に立てれば

参照javaのtoStringメソッドが配列に対して機能しないように見えるのはなぜですか

于 2013-02-19T12:57:07.760 に答える
-1
String newString= Arrays.toString(oldString).replace("[","").replace("]","").replace(",","").trim();
于 2017-10-25T02:28:48.840 に答える