02_oo_15_string

第二十八章 字符串类(String)

1 简介

字符串类是Java语言提供的、用于表示一串字符的类。一个字符串对象能够表示一个单词、一句话、甚至是一个长的段落。因为字符串是程序经常使用的类型,为了给开发人员提供方便,Java语言对字符串类做了许多特殊处理和优化,我们将在本章中详细介绍字符串的基本使用方法。

2 字符串字面常量

字符串字面常量是由一对双引号包含的字符串。在双引号之间,可能包含0个、1个或者多个字符。下面列举了一些字符串字面常量的例子。

""                   // 这是一个空字符串,它包含0个字符
"a"                  // 这是一个字符串,包含一个字符a
"This is a string."  // 这是一个字符串,包含一个句子。

因为双引号被用于表示字符串的"边界",当字符串本身包含双引号时,我们需要使用转移字符(Escaped Character)来表达双引号和一些其他的特殊字符,如下面的例子所示。

"\"Hello World!\"" // 这是一个字符串,它表示文本"Hello World!"

如果需要表示多行的文本,我们可以使用文本块。文本块的"边界"由三个连续的双引号组成。例如:

"""This is an example of text block.
This text block contains two lines of text."""

3 字符串基本使用方法

3.1 字符串创建

在程序中创建和使用字符串非常方便。在下面的例子中,我们创建了两个字符串对象。字符串的类型为String。字符串str1表示"text1";字符串str2表示"text2"。

String str1 = "text1";
String str2 = new String("text2");

3.2 字符串长度

字符串类String提供了length()方法,用于获取字符串的长度,即字符串中包含的字符个数。例如:下面的程序会打印str1字符串的长度5。

String str1 = "text1";
System.out.println(str1.length());

3.3 字符串拼接

字符串支持使用加号来拼接字符串(String Concatenation)。例如,在下面的程序中,变量str1表示的文本为"David likes apple and orange."。String类还提供了concat()方法,用于字符串拼接。所以,变量str1和str2表示的是相同的文本。

String str1 = "David likes apple " + " and orange."; 
String str2 = "David likes apple ".concat(" and orange.");

3.4 字符串格式化

当需要将整数、浮点数或者字符串"插入"到一个字符串模板时,可以使用字符串格式化方法format()。例如,在如下的代码中,我们将订单号和订单总价格放置在已格式化的模板中。所以,变量orderDescription中存放的字符串为"You have paid $18.50 for the order 1234."。

int orderId = 1234;
float amount = 18.50f;
String orderDescription = String.format("You have paid $%.2f for the order %d.", amount, orderId);
System.out.println(orderDescription);

3.5 字符串转换

当需要将基本类型变量转换成字符串对象时,String类提供了一组valueOf()方法。我们通过使用这些方法,能方便的获得对应的字符串。

int i = 10;
boolean b = true;
float f = 2.0f;

String strOfi = String.valueOf(i);
String strOfb = String.valueOf(b);
String strOff = String.valueOf(f);

String类还提供了将对象转换为字符串的valueOf()方法。当输入参数为null时,返回字符串"null"。当输入参数不为null时,则返回toString()方法的值。

Student aStudent = null;
String str = String.valueOf(aStudent); // 此时str的值为"null"
aStudent = new Student(1234);
str = String.valueOf(aStudent); // 此时str的值与aStudent.toString()方法的返回值相同

3.6 字符串比较

因为字符串不是基本数据类型,而是对象,所以,字符串不能像基本数据类型那样使用"=="操作符来比较字符串的内容。当操作符"=="用于比较字符串对象时,判断的是两个变量是否指向同一个对象。而当需要比较两个字符串是否包含相同的字符时,需要使用equals()方法。因此,在下面的示例代码中分别判断了str1和str2是否指向同一个对象和判断了str3和str4是否包含相同的字符内容。

if (str1 == str2) {
    // 比较str1和str2是否指向同一个对象
}

if (str3.equals(str4)) {
    // 比较str3和str4是否包含相同的内容,相同的字符
}

String类还提供了compareTo()和compareToIgnoreCase()两个方法按照字典序比较两个字符串对象。compreTo()方法比较两个对象的内容;compareToIgnoreCase()方法比较两个对象时,不考虑因为字符大小写的区别而引起的不同。当这两个方法返回0时,两个对象的内容相同。如果按照字典排序,当第一个对象出现在第二个对象之前时,这两个方法返回负数。当第一个对象出现在第二个对象之后时,这两个方法返回正数。

3.7 字符串大小写转换

有时开发人员希望进行字符串大小写转换。String类也提供了相应的方法进行转换。toLowerCase()将字符串转换为相应的小写字符串;toUpperCase()将字符串转换为相应的大写字符串。

String str = "123aBcDeF";
String lowercaseOfStr = str.toLowerCase(); // lowercaseOfStr的值为"123abcdef"
String uppercaseOfStr = str.toUpperCase(); // uppercaseOfStr的值为"123ABCDEF"

3.8 字符串中的子串查找

indexOf()和lastIndexOf()方法从字符串中正向或者逆向查找一个子串。例如,在下面的示例中,我们从正向和逆向查找子串"abc"在字符串str中的位置。

String str = "abc123abc";
int first = str.indexOf("abc"); // first的值为0
int last = str.lastIndexOf("abc"); // last的值为6

3.9 其他有用的字符串方法

还有一些非常有用的字符串方法。trim()方法删除字符串两端的空白字符。isBlank()和isEmpty()方法判断字符串是否为空字符串。startsWith()和endsWith()方法判断字符串是否以某一子串开头或者结尾。我们将这些方法和功能罗列在下表中。

方法名称功能
char charAt(int index);获得序号为index的字符
int compareTo(String another);比较字符串another
int compareToIgnoreCase(String another);比较字符串another,不考虑大小写的区别
boolean contains(CharSequence s);检查是否包含子串s
boolean endsWith(String suffix);检查是否以子串suffix结尾
byte[] getBytes(String charsetName);使用charsetName的编码方式将字符串转换为字节数组
byte[] getBytes(Charset charset);使用charset的编码方式将字符串转换为字节数组
boolean isBlank();检查字符串是否为空字符串
boolean isEmpty();检查字符串是否为空字符串
String join(CharSequence delimiter, Iterable<? extends CharSequence> elements);拼接字符串
boolean matches (String regex);字符串模式匹配
String repeat(int count);生成重复的字符串
String replace(CharSequence target, CharSequence replacement);将子串target替换成replacement
String replaceAll(String regex, String replacement);使用正则表达式,将匹配的regex全部替换成replacement
String relaceFirst(String regex, String replacement);使用正则表达式,将第一个匹配的regex替换成replacement
String[] split(String regex);字符串拆分
boolean startsWith(String prefix);判断字符串是否以prefix开始
String strip();删除字符串两端的空白字符
String stripLeading();删除字符串头部的空白字符
String stripTrailing();删除字符串尾部的空白字符
String substring(int beginIndex);在字符串中查找子串
String substring(int beginIndex, int endIndex);在字符串中查找子串
char[] toCharArray();将字符串转换成字符数组
String trim();删除字符串两端的空白字符

4 小结

String是Java语言提供的预定义类,也是程序设计中使用最多的一个类。String类能够表达各个国家、各个地区的文字。所以,熟练掌握String类是Java编程的基础。

上一章
下一章

注册用户登陆后可留言

Copyright  2019 Little Waterdrop, LLC. All Rights Reserved.