2010-11-03 56 views
1

所以我想能够在Java中有一个可变的字符串集合。得到一个字符串作为参考在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的引用。这是最好的选择吗?

+0

你需要什么*可变字符串? – EJP 2010-11-04 00:12:25

回答

4

我可以推荐你使用StringBuffer

从API:

一个线程安全的,字符的可变序列。 字符串缓冲区就像一个字符串,但可以修改。在任何时间点,它都包含一些特定的字符序列,但序列的长度和内容可以通过某些方法调用进行更改。

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

+0

谢谢,这看起来像我想要的实现。 – Brad 2010-11-03 10:20:59

7

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

可变的字符序列。

这是StringBuffer

+1

(请注意,除了向后兼容外,'StringBuffer'的有效使用非常非常罕见。) – 2010-11-03 12:29:38

0

疗法的不同步(和更有效)的版本不是Java中的参考副本。您可以为GetString类创建一个新方法,将新的String设置为确定的索引。

例如: gst.changeString(index,“NewString”);

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

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

那是因为你的矢量持有对一个不可变的String的引用,该引用可以被另一个String替换,该String本身不能改变。