Java String 类常用方法详解
在 Java 编程里,字符串操作十分常见,而 String
类作为 Java 标准库的核心类,用于表示不可变的字符序列。任何对字符串的修改操作都会返回一个新的字符串对象,不会改变原始字符串。本文将详细介绍 String
类的常用方法,并结合示例代码帮助理解。
一、String 对象的创建
String
对象的创建主要有以下两种方式:
1. 直接赋值
这是最常见的创建字符串的方式,使用双引号将一系列字符括起来即可:
java
String str1 = "Hello, ";
2. 使用 new
关键字
通过对象实例化的方式,将需要创建的字符串作为构造参数传入:
java
String str2 = new String("Hello, Java");
若调用 String
类的无参构造方法,则会创建一个空字符串,不过这种方式很少使用:
java
String str3 = new String();
二、获取字符串长度
可以使用 length()
方法来获取字符串的长度,示例代码如下:
java
public class StringMethod1 {
public static void main(String[] args) {
String str = "hello world!";
int length = str.length();
System.out.println("str的长度为:" + length);
}
}
运行结果:
str的长度为:12
需要注意的是,字符串中的空格也算一个字符。
三、字符串查找
1. 获取指定位置字符
使用 char charAt(int index)
方法可以获取字符串指定位置的字符,索引下标从 0 开始。示例如下:
java
public class StringMethod2 {
public static void main(String[] args) {
String str = "I love Java";
char c = str.charAt(7);
System.out.println("索引位置为7的字符为:" + c);
}
}
运行结果:
索引位置为7的字符为:J
2. 查找字符串位置
indexOf()
:获取字符或子串在字符串中第一次出现的位置。lastIndexOf()
:获取字符或子串在字符串中最后一次出现的位置。
示例代码如下:
java
public class StringMethod2 {
public static void main(String[] args) {
String str = "I love Java, I love imooc!";
// 获取字符在字符串中第一次出现的位置
int i1 = str.indexOf('a');
System.out.println("字符a在字符串str第一次出现的位置为:" + i1);
// 获取子串在字符串中第一次出现的位置
int i2 = str.indexOf("love");
System.out.println("子串love在字符串str第一次出现的位置为:" + i2);
// 获取字符在字符串中最后一次出现的位置
int i3 = str.lastIndexOf('e');
System.out.println("字符e在字符串str最后一次出现的位置为:" + i3);
// 获取子串在字符串中最后一次出现的位置
int i4 = str.lastIndexOf("I love");
System.out.println("子串I love在字符串str最后一次出现的位置为:" + i4);
// 查找不存在的字符
int i5 = str.indexOf('E');
System.out.println("查找不存在的字符E的结果为:" + i5);
}
}
运行结果:
字符a在字符串str第一次出现的位置为:8
子串love在字符串str第一次出现的位置为:2
字符e在字符串str最后一次出现的位置为:18
子串I love在字符串str最后一次出现的位置为:13
查找不存在的字符E的结果为:-1
需要注意的是,以上方法的参数都是区分大小写的,如果没有找到指定的字符或子串,会返回 -1。
四、字符串截取
可以使用 substring()
方法来获取子串,String
类中有两个重载的实例方法:
String substring(int beginIndex)
:获取从beginIndex
位置开始到结束的子串。String substring(int beginIndex, int endIndex)
:获取从beginIndex
位置开始到endIndex
位置的子串(不包含endIndex
位置字符)。
示例代码如下:
java
public class StringMethod3 {
public static void main(String[] args) {
String str = "I love Java";
String substring1 = str.substring(2);
String substring2 = str.substring(2, 6);
System.out.println("从索引位置2到结束的子串为:" + substring1);
System.out.println("从索引位置2到索引位置6的子串为:" + substring2);
}
}
运行结果:
从索引位置2到结束的子串为:love Java
从索引位置2到索引位置6的子串为:love
五、字符串切割
1. 切割为子串数组
使用 String[] split(String regex)
方法可将字符串切割为子串,其参数 regex
是一个正则表达式分隔符,返回字符串数组。示例如下:
java
public class StringMethod4 {
public static void main(String[] args) {
String str1 = "I love Java";
String[] strArr = str1.split(" ");
for (String str : strArr) {
System.out.print(str + "\t");
}
}
}
运行结果:
I love Java
对于一些特殊的分隔符,如 *
、^
、:
、|
、.
等,需要使用转义字符转义。例如:
java
// 以 * 切割
String str2 = "I*love*Java";
String[] strArr2 = str2.split("\\*");
// 以 \ 切割
String str3 = "I\\love\\Java";
String[] strArr3 = str3.split("\\\\");
// 以 | 切割
String str4 = "I|love|Java";
String[] strArr4 = str4.split("\\|");
另外,还有一个重载方法 String[] split(String regex, int limit)
,其第二个参数 limit
用以控制正则匹配被应用的次数,会影响结果的长度。
2. 切割为 byte
数组
在实际工作中,网络上的数据传输通常使用二进制字节数据,因此字符串和字节数组之间的相互转换很常用。可以使用 getBytes()
方法将字符串转换为 byte
数组,示例如下:
java
public class StringMethod4 {
public static void main(String[] args) {
String str2 = "我喜欢Java";
System.out.println("将字符串转换为byte数组:");
byte[] ascii = str2.getBytes();
for (byte aByte : ascii) {
System.out.print(aByte + "\t");
}
// 将字节数组转换为字符串
String s = new String(ascii);
System.out.println("\n将字节数组转换为字符串:" + s);
}
}
六、字符串大小写转换
字符串的大小写转换有两个方法:
toLowerCase()
:将字符串转换为小写。toUpperCase()
:将字符串转换为大写。
示例代码如下:
java
public class StringMethod5 {
public static void main(String[] args) {
String str = "HELLO world";
String s1 = str.toLowerCase();
System.out.println("字符串str转换为小写后为:" + s1);
String s2 = s1.toUpperCase();
System.out.println("字符串s1转换为大写后为:" + s2);
// 实现大小写互换
String[] strArr = str.split(" ");
String result = strArr[0].toLowerCase() + " " + strArr[1].toUpperCase();
System.out.println("字符串str的大小写互换后为:" + result);
}
}
运行结果:
字符串str转换为小写后为:hello world
字符串s1转换为大写后为:HELLO WORLD
字符串str的大小写互换后为:hello WORLD
七、字符串比较
String
类提供了 boolean equals(Object object)
方法来比较字符串内容是否相同,返回一个布尔类型的结果。需要特别注意的是,在比较字符串内容是否相同时,必须使用 equals()
方法而不能使用 ==
运算符。示例代码如下:
java
public class StringMethod6 {
public static void main(String[] args) {
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
System.out.println("使用equals()方法比较str1和str2的结果为:" + str1.equals(str2));
System.out.println("使用==运算符比较str1和str2的结果为:" + (str1 == str2));
System.out.println("使用equals()方法比较str1和str3的结果为:" + str1.equals(str3));
System.out.println("使用==运算符比较str1和str3的结果为:" + (str1 == str3));
}
}
运行结果:
使用equals()方法比较str1和str2的结果为:true
使用==运算符比较str1和str2的结果为:true
使用equals()方法比较str1和str3的结果为:true
使用==运算符比较str1和str3的结果为:false
==
运算符比较的是两个变量的地址而不是内容。当使用直接赋值的方式创建字符串时,相同内容的字符串会指向常量池中的同一个对象;而使用 new
关键字创建字符串对象时,会在堆空间实例化一个新的对象。
八、小结
本文介绍了 Java String
类的常用方法:
- 使用
length()
方法可以获取字符串长度。 - 使用
charAt()
、indexOf()
以及lastIndexOf()
方法可以对字符串进行查找。 substring()
方法可以对字符串进行截取,split()
、getBytes()
方法可以将字符串切割为数组。toLowerCase()
和toUpperCase()
方法分别用于大小写转换,使用equals()
方法对字符串进行比较,要注意对字符串内容进行比较时,不要使用==
运算符。
这些方法大多有重载方法,实际工作中,要根据合适的场景选用对应的重载方法。此外,String
类还有很多未介绍到的方法,使用时可以翻阅官网文档进行学习。