Java

Java 知识量:11 - 45 - 220

9.1 文本><

字符串字面量- 9.1.1 -

字符串字面量是指直接在代码中写出的字符串值。它们被双引号(" ")包围,并且Java会自动在它们前面添加一个" "前缀,以表示它们是字符串字面量。

例如,"Hello, World!" 是一个字符串字面量。

String s = "Hello, World!";

在上述示例中,创建了一个名为 s 的字符串变量,并将字符串字面量 "Hello, World!" 分配给它。

需要注意的是,Java会对字符串字面量中的内容进行编译时和运行时的单引号字符替换,也就是说,如果字符串字面量中包含单引号字符,那么Java会将它替换为两个单引号字符,以避免字符串字面量在编译时和运行时被误解。

例如,以下的代码将打印出包含两个连续单引号字符的字符串:

String s = "It''s a beautiful day.";  
System.out.println(s);

输出结果为:It's a beautiful day.

toString()方法- 9.1.2 -

toString()是Java中的一个方法,用于将一个对象转换成其对应的字符串表示形式。这个方法是在Object类中定义的,因此可以在任何类中调用。

默认情况下,toString()方法会返回一个包含该对象的类名和哈希码的字符串。例如:

class MyClass {  
    // some fields and methods  
}  
  
MyClass obj = new MyClass();  
System.out.println(obj.toString()); // 输出:MyClass@15db9742

这个默认的toString()方法通常不是很有用,因为它没有提供关于对象状态或内容的信息。因此,许多类都会覆盖这个方法以提供更有用的信息。例如:

class Person {  
    private String name;  
    private int age;  
      
    public Person(String name, int age) {  
        this.name = name;  
        this.age = age;  
    }  
      
    @Override  
    public String toString() {  
        return "Person{name='" + name + "', age=" + age + "}";  
    }  
}  
  
Person person = new Person("Alice", 25);  
System.out.println(person.toString()); // 输出:Person{name='Alice', age=25}

在这个例子中,覆盖了toString()方法来返回一个包含Person对象名称和年龄的字符串。这样当打印Person对象时,就能得到更有用的信息。

需要注意的是,如果是一个集合类(如List,Set,Map等)或其他容器类,那么它们的toString()方法会递归调用其内部元素的toString()方法来获取每个元素的字符串表示,然后将这些字符串用特定分隔符连接起来。因此,如果容器中的元素是自定义类的实例,那么需要确保这些类也正确覆盖了toString()方法。

字符串连接- 9.1.3 -

可以通过以下几种方式来连接(拼接)字符串:

1、使用 + 运算符:

String str1 = "Hello ";  
String str2 = "World!";  
String str3 = str1 + str2; // "Hello World!"

2、使用 concat() 方法:

String str1 = "Hello ";  
String str2 = "World!";  
String str3 = str1.concat(str2); // "Hello World!"

3、使用 StringBuilder:

String str1 = "Hello ";  
String str2 = "World!";  
StringBuilder sb = new StringBuilder();  
sb.append(str1);  
sb.append(str2);  
String str3 = sb.toString(); // "Hello World!"

4、使用 String.format():

String str1 = "Hello ";  
String str2 = "World!";  
String str3 = String.format("%s%s", str1, str2); // "Hello World!"

以上是几种不同的字符串连接(拼接)方法,可以根据具体的使用场景和需求选择合适的方法。在大多数情况下,使用 + 运算符或 concat() 方法是最简单和直观的选择。如果需要拼接大量的字符串,或者在循环中拼接字符串,使用 StringBuilder 通常更高效。如果需要将字符串格式化,例如插入变量或执行更复杂的文本处理,String.format() 可能会非常有用。

字符串的不可变性- 9.1.4 -

Java中的字符串是不可变的。这意味着一旦创建了一个字符串对象,就不能更改它的内容。

例如,以下代码创建一个字符串对象:

String str = "Hello World";

一旦该字符串对象被创建,就不能更改它的内容。以下代码将创建一个新的字符串对象,而不是更改原始字符串对象的内容:

str = "Hello Java";

在Java中,字符串的不可变性是由String类实现的。String类中的所有方法,如concat()、substring()、replace()等,都返回一个新的字符串对象,而不是更改原始字符串对象的内容。因此,在Java中,不应该尝试更改字符串对象的内容,而是应该创建新的字符串对象来表示修改后的文本。

虽然字符串是不可变的,但是可以使用StringBuilder类或StringBuffer类来创建可变的字符串对象。这些类提供了修改字符串内容的方法,例如append()、insert()、delete()等。在执行大量字符串修改操作时,使用这些类可以提高程序的性能。

正则表达式- 9.1.5 -

正则表达式用于处理字符串非常方便。在Java中使用正则表达式,主要通过java.util.regex包中的类进行操作,主要包括Pattern和Matcher两个类。

以下是一个基本的使用例子:

import java.util.regex.Matcher;  
import java.util.regex.Pattern;  
  
public class Main {  
    public static void main(String[] args) {  
        // 定义一个正则表达式,用于匹配所有的数字  
        String regex = "\\d+";  
          
        // 创建Pattern对象  
        Pattern pattern = Pattern.compile(regex);  
          
        // 将要匹配的字符串  
        String str = "我有100元和200元";  
          
        // 创建Matcher对象  
        Matcher matcher = pattern.matcher(str);  
          
        // 使用Matcher的find方法查找匹配的子串  
        while (matcher.find()) {  
            // 使用Matcher的group方法获取匹配的子串  
            System.out.println(matcher.group());  
        }  
    }  
}

在这个例子中,使用"\d+"作为正则表达式,它表示一位或多位数字。用这个正则表达式创建一个Pattern对象,然后使用这个Pattern对象创建一个Matcher对象,用来在字符串"我有100元和200元"中寻找匹配的子串。最后,用Matcher的find方法来查找匹配的子串,用group方法来获取匹配的子串。