1

だから私はJavaで可変文字列のコレクションを持つことができるようにしたい.

不変の文字列の機能を確認するために、次のテスト クラスがあります。

public class GetStringTest
{
    private Vector<String> m_stringList;

    public GetStringTest()
    {
        m_stringList = new Vector<String>();

        m_stringList.add("zero");
        m_stringList.add("one");
        m_stringList.add("two");
        m_stringList.add("three");
        m_stringList.add("four");
        m_stringList.add("five");
        m_stringList.add("six");
    }

    public String getString(int index)
    {
        return m_stringList.get(index);
    }

    public String toString()
    {
        String str = "";

        for (String item : m_stringList)
        {
            str += item + "\n";
        }

        return str;
    }

    public static void main(String[] args)
    {
        GetStringTest gst = new GetStringTest();

        System.out.println("=== original content ===");
        System.out.println(gst);

        String strToChange = gst.getString(2); // "two"
        strToChange = "eleventy-one";

        System.out.println("=== with change ===");
        System.out.println(gst);
    }
}

出力は次のとおりです。

=== original content ===
zero
one
two
three
four
five
six

=== with change ===
zero
one
two
three
four
five
six

これらの文字列を変更可能として保存するにはどうすればよいですか? String への参照を単純に含む StringObject クラスを持つことを考えていました。これは最良の選択肢ですか?

4

4 に答える 4

7

StringBuilder変更可能な文字列表現です。

文字の変更可能なシーケンス。

の非同期 (およびより効率的な) バージョンです。StringBuffer

于 2010-11-03T10:04:50.257 に答える
4

を使用することをお勧めしますStringBuffer

API から:

スレッドセーフで変更可能な文字シーケンス。文字列バッファは文字列に似ていますが、変更できます。任意の時点で特定の文字シーケンスが含まれますが、シーケンスの長さと内容は、特定のメソッド呼び出しによって変更できます。

で使用する予定がない場合StringBuilderは、非同期で高速な a を使用した方がよいことに注意してください。

于 2010-11-03T10:04:26.467 に答える
2

リスト要素を変更(置換)したい場合は、追加できます

public String setString(int index,String str) 
    { 
        return m_stringList.set(index, str); 
    } 

そして呼び出します:

String strToChange = gst.setString(2,"eleventy-one"); 

それ以外の:

String strToChange = gst.getString(2); // "two" 
strToChange = "eleventy-one"; 

これは、ベクターが不変の文字列への参照を保持しているため、参照を別の文字列に置き換えることができ、文字列自体を変更することはできません。

于 2010-11-03T10:09:07.540 に答える
0

Java のリファレンス コピーはありません。GetString クラスに新しいメソッドを実行して、新しい文字列を特定のインデックスに設定できます。

例: gst.changeString(index, "NewString");

changeString は内部的に "NewString" への参照を設定します。

于 2010-11-03T10:08:35.620 に答える