字符串类是Java语言提供的、用于表示一串字符的类。一个字符串对象能够表示一个单词、一句话、甚至是一个长的段落。因为字符串是程序经常使用的类型,为了给开发人员提供方便,Java语言对字符串类做了许多特殊处理和优化,我们将在本章中详细介绍字符串的基本使用方法。
字符串字面常量是由一对双引号包含的字符串。在双引号之间,可能包含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."""
在程序中创建和使用字符串非常方便。在下面的例子中,我们创建了两个字符串对象。字符串的类型为String。字符串str1表示"text1";字符串str2表示"text2"。
String str1 = "text1";
String str2 = new String("text2");
字符串类String提供了length()方法,用于获取字符串的长度,即字符串中包含的字符个数。例如:下面的程序会打印str1字符串的长度5。
String str1 = "text1";
System.out.println(str1.length());
字符串支持使用加号来拼接字符串(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.");
当需要将整数、浮点数或者字符串"插入"到一个字符串模板时,可以使用字符串格式化方法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);
当需要将基本类型变量转换成字符串对象时,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()方法的返回值相同
因为字符串不是基本数据类型,而是对象,所以,字符串不能像基本数据类型那样使用"=="操作符来比较字符串的内容。当操作符"=="用于比较字符串对象时,判断的是两个变量是否指向同一个对象。而当需要比较两个字符串是否包含相同的字符时,需要使用equals()方法。因此,在下面的示例代码中分别判断了str1和str2是否指向同一个对象和判断了str3和str4是否包含相同的字符内容。
if (str1 == str2) {
// 比较str1和str2是否指向同一个对象
}
if (str3.equals(str4)) {
// 比较str3和str4是否包含相同的内容,相同的字符
}
String类还提供了compareTo()和compareToIgnoreCase()两个方法按照字典序比较两个字符串对象。compreTo()方法比较两个对象的内容;compareToIgnoreCase()方法比较两个对象时,不考虑因为字符大小写的区别而引起的不同。当这两个方法返回0时,两个对象的内容相同。如果按照字典排序,当第一个对象出现在第二个对象之前时,这两个方法返回负数。当第一个对象出现在第二个对象之后时,这两个方法返回正数。
有时开发人员希望进行字符串大小写转换。String类也提供了相应的方法进行转换。toLowerCase()将字符串转换为相应的小写字符串;toUpperCase()将字符串转换为相应的大写字符串。
String str = "123aBcDeF";
String lowercaseOfStr = str.toLowerCase(); // lowercaseOfStr的值为"123abcdef"
String uppercaseOfStr = str.toUpperCase(); // uppercaseOfStr的值为"123ABCDEF"
indexOf()和lastIndexOf()方法从字符串中正向或者逆向查找一个子串。例如,在下面的示例中,我们从正向和逆向查找子串"abc"在字符串str中的位置。
String str = "abc123abc";
int first = str.indexOf("abc"); // first的值为0
int last = str.lastIndexOf("abc"); // last的值为6
还有一些非常有用的字符串方法。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(); | 删除字符串两端的空白字符 |
String是Java语言提供的预定义类,也是程序设计中使用最多的一个类。String类能够表达各个国家、各个地区的文字。所以,熟练掌握String类是Java编程的基础。
注册用户登陆后可留言