StringBuilder类类似于String类。这两者之间的主要区别是,您可以更改StringBuilder对象的内容,但您不能更改String对象的内容。回想一下,String对象是不可变的(immutable)。这意味着一旦设置了String对象的内容,就不能更改它所保存的字符串值。
看一个例子:
String name;
name = "George";
name = "Sally";
这里的name变量从George变成Sally的时候并没有改变的值,而是直接将一个新的对象Sally赋值给了name变量。
与string不同,stringbulider可以更改,插入,删除一个字符串中特定的字符。对于一个stringbulider类型的对象来说,它可以改变字符串的长度,相比于string类,这可以提高程序的效率。
StringBuilder city = new StringBuilder("Charleston");
System.out.println(city);
这段代码创建了一个StringBuilder对象,并将其地址分配给city变量。该对象用字符串“Charleston”初始化。如此代码所示,我们可以将字符串生成器对象传递给println和print方法。StringBuilder类的一个限制是不能直接将string类的对象赋值给它:
StringBuilder city = "Charleston"; // ERROR!!! Will not work!
我们必须使用new语句并调用构造器才可以创建StringBuilder对象。
StringBuilder类提供了很多和string类似的方法:
char charAt(int position)
void getChars(int start, int end, char[] array, int arrayStart)
int indexOf(String str)
int indexOf(String str, int start)
int lastIndexOf(String str)
int lastIndexOf(String str, int start)
int length()
String substring(int start)
String substring(int start, int end)
当然,StringBuilder类也提供了一些string没有的方法。
StringBuilder类有一个名为append的方法,它有几个重载版本,这些方法接受一个参数,该参数可以是任何原始数据类型、以及char数组和string对象。它们将其参数的string表示形式添加到调用对象的末尾。
StringBuilder str = new StringBuilder();
// Append values to the object.
str.append("We sold "); // Append a String object.
str.append(12); // Append an int.
str.append(" doughnuts for $"); // Append another String.
str.append(15.95); // Append a double.
// Display the object's contents.
System.out.println(str);
We sold 12 doughnuts for $15.95
StringBuilder类也有几个名为insser的方法,它也有几个重载版本,该方法将值插入调用的对象中。这些方法接受两个参数:一个int,它指定应该开始插入的位置;另一个是要插入的内容。要插入的内容可以是任何原始数据类型、char数组或string对象。
StringBuilder str = new StringBuilder("New City");
str.insert(4, "York ");
System.out.println(str);
第一行语句创建一个用字符串“New City”初始化的StringBuilder对象。第二个语句将字符串“York”插入到StringBuilder对象的第四个字符后面,也就是空格后面。当前对象中位置4后的所有字符都被移到右边。在内存中,StringBuilder对象会自动扩展其大小,以适应插入的字符。如果我们运行这个程序,将打印New York City。
再看一个例子:
char cArray[] = { '2', '0', ' ' };
StringBuilder str = new StringBuilder("In July we sold cars.");
str.insert(16, cArray);
System.out.println(str);
In July we sold 20 cars
StringBuilder str =
new StringBuilder("I ate 100 blueberries!");
// Display the StringBuilder object.
System.out.println(str);
// Delete the '0'.
str.deleteCharAt(8);
// Delete "blue".
str.delete(9, 13);
// Display the StringBuilder object.
System.out.println(str);
// Change the '1' to '5'
str.setCharAt(6, '5');
// Display the StringBuilder object.
System.out.println(str);
I ate 100 blueberries!I ate 10 berries!I ate 50 berries!
StringBuilder strb = new StringBuilder("This is a test.");
String str = strb.toString();
先看下面的这些字符串:
"peach raspberry strawberry vanilla""17;92;81;12;46;5""3-22-2018"/home/rsullivan/data
这些字符串都有其分隔符(空格、分号;-;/),将字符串按照分隔符分割成一个一个小字符串就是 Tokenizing Strings,string类有一个split方法可以进行这样的操作。
/**
This program demonstrates the String class’s
split method.
*/
public class SplitDemo1
{
public static void main(String[] args)
{
// Create a string to tokenize.
String str = "one two three four";
// Get the tokens, using a space delimiter.
String[] tokens = str.split(" ");
// Display the tokens.
for (String s : tokens)
System.out.println(s);
}
}
onetwothreefour
在前面的示例中,我们将一个空格传递给了split方法,这就指定空格是分隔符。拆分方法还允许我们使用多字符分隔符。这意味着我们不限于单个字符作为分隔符,比如分隔符可以是完整的单词:
// Create a string to tokenize.
String str = "one and two and three and four";
// Get the tokens, using " and " as the delimiter.
String[] tokens = str.split(" and ");
// Display the tokens.
for (String s : tokens)
System.out.println(s);
onetwothreefour
前面的代码演示了多字符分隔符(包含多个字符的一个分隔符)。我们还可以指定一系列的字符,其中每个单独的字符都是一个分隔符。比如我们希望@和.都是分隔符,可以将它们放进括号中:"[@.]"
// Create a string to tokenize.
String str = "[email protected]";
// Get the tokens, using @ and . as delimiters.
String[] tokens = str.split("[@.]");
// Display the tokens.
for (String s : tokens)
System.out.println(s);
joegaddisbookscom
string类还有一个方法用于去除空格,叫做trim:
// Create a string with leading and trailing whitespaces.
String str = " one;two;three ";
// Trim leading and trailing whitespace.
str = str.trim();
// Tokenize the string using the semicolon as a delimiter.
String[] tokens = str.split(";");
// Display the tokens.
for (String s : tokens)
{
System.out.println("*" + s + "*");
}
运行程序,将打印:
*one**two**three*
而不是:
* one**two**three *