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

我该怎么做才能将这些字符串存储为可变的?我正在考虑有一个 StringObject 类,它只包含对 String 的引用。这是最好的选择吗?

4

4 回答 4

7

StringBuilder是一个可变的字符串表示。

可变的字符序列。

它是不同步(且更高效)的版本StringBuffer

于 2010-11-03T10:04:50.257 回答
4

我可以建议您使用StringBuffer.

从 API:

一个线程安全的、可变的字符序列。字符串缓冲区类似于字符串,但可以修改。在任何时候它都包含一些特定的字符序列,但是序列的长度和内容可以通过某些方法调用来改变。

请注意,如果您不打算在其中使用它,最好使用 a StringBuilder,因为它不同步且速度更快。

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

那是因为您的 Vector 持有对不可变字符串的引用,该引用可以被另一个字符串替换,字符串本身不能更改。

于 2010-11-03T10:09:07.540 回答
0

Java 中没有参考副本。您可以对 GetString 类执行新方法以将新 String 设置为确定的索引。

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

changeString 在内部设置对“NewString”的引用。

于 2010-11-03T10:08:35.620 回答