在Java中,String是一种用于表示不可变序列字符的类。它是Java中最常用的类之一,几乎每个Java应用都需要使用String类来处理字符串数据。本文将从多个角度详细分析Java中的String用法,以便读者深入了解String类的特性和用法。
1. String类的创建和初始化
String类可以通过直接使用字符串字面量、使用构造方法或调用静态工厂方法来创建和初始化。最简单的创建方式是直接赋值字符串字面量:
```
String str1 = "hello";
```
此外,也可以使用构造方法来创建String对象:
```
String str2 = new String("world");
```
对于含有特殊字符的字符串,需要使用转义字符:
```
String str3 = "It's a beautiful day";
String str4 = "I said \"Hello\" to him";
```
还可以使用静态工厂方法来创建String对象,如下所示:
```
String str5 = String.valueOf(100);
String str6 = String.join(",", "apple", "orange", "banana");
```
2. String比较
在Java中,字符串比较可以使用equals()方法和==运算符。equals()方法比较字符串的内容是否相等,==运算符比较的是字符串对象的引用地址是否相等。举个例子:
```
String str1 = "hello";
String str2 = new String("hello");
String str3 = "hello";
System.out.println(str1.equals(str2)); // true
System.out.println(str1 == str2); // false
System.out.println(str1 == str3); // true
```
可以看到,str1和str3都是直接创建的字符串字面量,它们引用同一个字符串对象,所以==运算符返回true。而str2是通过构造方法创建的新字符串对象,所以它和str1使用==运算符比较时返回false。
3. String与StringBuilder/StringBuffer
String类是不可变的,这意味着一旦创建了一个String对象,就无法修改其中的字符。而StringBuilder和StringBuffer类则是可变的,它们允许在原来的字符串上进行添加、删除或修改操作。StringBuilder类是Java 5中引入的,它是非线程安全的;而StringBuffer是Java 1.0中引入的,它是线程安全的,但效率较低。
举个例子,使用StringBuilder可以拼接多个字符串:
```
StringBuilder sb = new StringBuilder("hello");
sb.append(" world");
sb.append("!");
String result = sb.toString();
System.out.println(result); // hello world!
```
4. 字符串的截取和替换
Java中,可以使用substring()方法来截取字符串:
```
String str = "hello world";
String substr = str.substring(0, 5); // 截取前5个字符
```
还可以使用replace()方法来替换字符串中的子串:
```
String source = "hello world";
String result = source.replace("world", "java");
System.out.println(result); // hello java
```
5. 字符串的查找和分割
Java中,可以使用indexOf()方法来查找子串在字符串中第一次出现的位置:
```
String str = "hello world";
int index = str.indexOf("world");
System.out.println(index); // 6
```
还可以使用split()方法来分割字符串:
```
String str = "apple,orange,banana";
String[] parts = str.split(",");
for (String part : parts) {
System.out.println(part);
}
```
6. 字符串的格式化
Java中,可以使用String.format()方法来将字符串格式化,类似于C语言中的printf函数:
```
String str = String.format("Today is %tm %
System.out.println(str); // Today is 10 Oct,2021
```
7. 字符串的处理性能
由于String类的不可变性质,每一次对字符串做修改(如拼接、截取、替换等操作),都需要创建一个新的String对象。如果需要频繁地对字符串做修改操作,使用StringBuilder或StringBuffer类会更加高效。
微信扫一扫,领取最新备考资料