学习笔记17(StringBuilder和Tokenizing Strings)
作者:互联网
一、StringBuilder类
1、与String的区别
StringBuilder类类似于String类。这两者之间的主要区别是,您可以更改StringBuilder对象的内容,但您不能更改String对象的内容。回想一下,String对象是不可变的(immutable)。这意味着一旦设置了String对象的内容,就不能更改它所保存的字符串值。
看一个例子:
String name;
name = "George";
name = "Sally";
这里的name变量从George变成Sally的时候并没有改变的值,而是直接将一个新的对象Sally赋值给了name变量。
与string不同,stringbulider可以更改,插入,删除一个字符串中特定的字符。对于一个stringbulider类型的对象来说,它可以改变字符串的长度,相比于string类,这可以提高程序的效率。
2、构造器
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对象。
3、一些方法
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没有的方法。
(1)append方法
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
(2)insert方法
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
(3)与删除有关的方法
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!
(4)toString方法
StringBuilder strb = new StringBuilder("This is a test.");
String str = strb.toString();
二、Tokenizing Strings
先看下面的这些字符串:
"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);
}
}
one two three four
在前面的示例中,我们将一个空格传递给了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);
one two three four
前面的代码演示了多字符分隔符(包含多个字符的一个分隔符)。我们还可以指定一系列的字符,其中每个单独的字符都是一个分隔符。比如我们希望@和.都是分隔符,可以将它们放进括号中:"[@.]"
// Create a string to tokenize.
String str = "joe@gaddisbooks.com";
// Get the tokens, using @ and . as delimiters.
String[] tokens = str.split("[@.]");
// Display the tokens.
for (String s : tokens)
System.out.println(s);
joe gaddisbooks com
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 *
标签:String,17,Tokenizing,StringBuilder,tokens,int,str,string 来源: https://blog.csdn.net/qq_52315213/article/details/122724587