On this page

Java字符和字符串

Java 字符和字符串

Java 提供了强大的字符和字符串处理能力,主要通过 char 类型和 String 类实现。

一、字符类型 (char)

1. 基本特性

  • 使用 char 关键字声明
  • 16位无符号 Unicode 字符
  • 范围:\u0000 (0) 到 \uffff (65,535)
  • 用单引号 '' 表示
char letter = 'A';
char chineseChar = '中';
char unicodeChar = '\u03A9'; // 希腊字母 Ω

2. 特殊转义字符

转义序列含义
\n换行
\t制表符
\\反斜杠
\'单引号
\"双引号
\r回车
\b退格
System.out.println("Hello\nWorld"); // 换行输出
System.out.println("Path: C:\\Java\\Files"); // 显示反斜杠

3. 字符运算

char c1 = 'A';
char c2 = 'B';

// 字符可以参与算术运算
System.out.println(c1 + 1); // 66 (ASCII码值计算)
System.out.println((char)(c1 + 1)); // 'B'

// 字符比较
System.out.println(c1 < c2); // true

二、字符串 (String)

1. 字符串基础

  • 使用 String 类表示
  • 不可变对象 (创建后内容不能改变)
  • 用双引号 "" 表示
String str1 = "Hello";
String str2 = new String("World");
String emptyStr = ""; // 空字符串

2. 字符串常用方法

长度和空检查

String s = "Java";
int len = s.length(); // 4
boolean isEmpty = s.isEmpty(); // false

字符串连接

String s1 = "Hello";
String s2 = "World";
String s3 = s1 + " " + s2; // "Hello World"
String s4 = s1.concat(" Java"); // "Hello Java"

字符串比较

String a = "Java";
String b = "java";

a.equals(b); // false (区分大小写)
a.equalsIgnoreCase(b); // true
a.compareTo(b); // 负数 (字典序比较)
"a".compareTo("b"); // -1

子字符串

String str = "Hello World";
str.substring(6); // "World"
str.substring(0, 5); // "Hello"

查找

String text = "Java programming";
text.indexOf("pro"); // 5
text.lastIndexOf('a'); // 3
text.contains("Java"); // true
text.startsWith("Java"); // true
text.endsWith("ing"); // true

替换

String s = "apple,orange,banana";
s.replace('a', 'A'); // "Apple,orAnge,bAnAnA"
s.replaceAll("an", "XX"); // "apple,orXXge,bXXaXXa"

大小写转换

String mixed = "JaVa";
mixed.toLowerCase(); // "java"
mixed.toUpperCase(); // "JAVA"

去除空白

String withSpaces = "  text  ";
withSpaces.trim(); // "text"
"  text  ".strip(); // "text" (Java 11+)

分割字符串

String fruits = "apple,orange,banana";
String[] fruitArray = fruits.split(",");
// ["apple", "orange", "banana"]

3. 字符串格式化

// String.format()
String formatted = String.format("Name: %s, Age: %d", "Alice", 25);

// printf 风格
System.out.printf("Value: %.2f%n", 3.14159);

// Java 15+ 文本块
String html = """
    <html>
        <body>
            <p>Hello, World!</p>
        </body>
    </html>
    """;

4. 字符串不可变性

String s = "hello";
s.toUpperCase(); // 返回新字符串"HELLO",原字符串不变
System.out.println(s); // 仍输出"hello"

// 实际修改需要重新赋值
s = s.toUpperCase(); // s现在指向"HELLO"

5. StringBuilder 和 StringBuffer

用于高效字符串拼接和修改:

// StringBuilder (非线程安全,性能更高)
StringBuilder sb = new StringBuilder();
sb.append("Java");
sb.append(" is");
sb.append(" cool");
String result = sb.toString(); // "Java is cool"

// StringBuffer (线程安全)
StringBuffer sbf = new StringBuffer();
sbf.append("Thread");
sbf.append(" safe");

三、字符与字符串转换

// 字符数组转字符串
char[] chars = {'J', 'a', 'v', 'a'};
String strFromChars = new String(chars); // "Java"

// 字符串转字符数组
String s = "Hello";
char[] charArray = s.toCharArray();

// 获取单个字符
char firstChar = s.charAt(0); // 'H'

四、重要注意事项

  1. 字符串比较不要用 ==

    String a = "hello";
    String b = new String("hello");
    System.out.println(a == b); // false (比较引用)
    System.out.println(a.equals(b)); // true (比较内容)
    
  2. 字符串常量池

    String s1 = "Java";
    String s2 = "Java"; // 重用常量池中的对象
    System.out.println(s1 == s2); // true
    
  3. 大字符串拼接避免用 +

    // 低效方式 (创建多个临时对象)
    String bigStr = "";
    for (int i = 0; i < 100; i++) {
        bigStr += i;
    }
       
    // 高效方式
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 100; i++) {
        sb.append(i);
    }
    String result = sb.toString();
    
  4. 检查空字符串

    String str = "";
    if (str.isEmpty()) {...}
    if (str.length() == 0) {...}
    if (str.equals("")) {...}
    
  5. 处理 null 字符串

    String str = null;
    if (str == null || str.isEmpty()) {...}
    // Java 11+
    if (str == null || str.isBlank()) {...}
    

掌握 Java 的字符和字符串处理是编程基础,合理使用这些功能可以编写出高效、可读性强的代码。