Java八:Character 类与string类

Character 类

java.lang.Characterchar 基本类型的包装类,它提供了一系列静态方法来操作和判断单个字符。

Character 类:是 char 基本类型的包装类,用于处理单个字符。String 类:是一个不可变的字符序列,用于处理一串字符(字符串)。

小伙伴们不清楚什么是包装类什么是基础类,可以看看我的文章java基础八:基础类与包装类

java 复制代码
// 自动装箱:char → Character
Character ch1 = 'A';

// 手动装箱(旧方式)
Character ch2 = Character.valueOf('B');

// 拆箱:Character → char
char c = ch1;  // 自动拆箱

常用静态方法(非常实用)

Character 类提供了大量用于判断字符类型转换大小写的静态方法:

方法 描述 示例
isDigit(char ch) 判断是否为数字 Character.isDigit('5')true
isLetter(char ch) 判断是否为字母 Character.isLetter('A')true
isLetterOrDigit(char ch) 判断是否为字母或数字 Character.isLetterOrDigit('a')true
isWhitespace(char ch) 判断是否为空白字符(空格、制表符等) Character.isWhitespace(' ')true
isUpperCase(char ch) 判断是否为大写字母 Character.isUpperCase('A')true
isLowerCase(char ch) 判断是否为小写字母 Character.isLowerCase('a')true
toUpperCase(char ch) 转换为大写 Character.toUpperCase('a')'A'
toLowerCase(char ch) 转换为小写 Character.toLowerCase('A')'a'
isSpaceChar(char ch) 判断是否为 Unicode 空格字符

典型使用场景

场景一:验证用户输入的密码强度

java 复制代码
public static boolean isValidPassword(String password) {
    boolean hasDigit = false;
    boolean hasLetter = false;
    
    for (int i = 0; i < password.length(); i++) {
        char c = password.charAt(i);
        if (Character.isDigit(c)) {
            hasDigit = true;
        } else if (Character.isLetter(c)) {
            hasLetter = true;
        } else {
            return false; // 包含非法字符
        }
    }
    return hasDigit && hasLetter;
}

场景二:统计字符串中字母、数字、空格的个数

java 复制代码
public static void countChars(String str) {
    int letterCount = 0, digitCount = 0, spaceCount = 0;
    
    for (char c : str.toCharArray()) {
        if (Character.isLetter(c)) {
            letterCount++;
        } else if (Character.isDigit(c)) {
            digitCount++;
        } else if (Character.isWhitespace(c)) {
            spaceCount++;
        }
    }
    
    System.out.println("字母: " + letterCount);
    System.out.println("数字: " + digitCount);
    System.out.println("空格: " + spaceCount);
}

String 类

java.lang.String 是 Java 中最常用的类之一,它代表一个不可变的字符序列。一旦创建,内容就不能改变。

1. 创建字符串的两种方式

java 复制代码
// 方式一:字面量(推荐,会放入字符串常量池)
String s1 = "Hello";

// 方式二:new 关键字(强制创建新对象,不推荐)
String s2 = new String("Hello");

// 两者区别:s1 指向常量池中的对象,s2 指向堆内存中的新对象
System.out.println(s1 == s2);  // false(地址不同)
System.out.println(s1.equals(s2)); // true(内容相同)

2. String 的不可变性(重要特性)

一旦创建,字符串内容无法修改。任何"修改"操作都会创建新的字符串对象。

java 复制代码
String s = "Hello";
s = s + " World";  // 实际上创建了一个新字符串 "Hello World",原来的 "Hello" 被丢弃

// 内存示意图:
// 原始: s → "Hello"(常量池)
// 操作后: s → "Hello World"(新对象),"Hello" 变为垃圾等待回收

3. 常用方法(按功能分类)

① 判断类方法
方法 描述 示例
length() 返回字符串长度 "Hello".length()5
isEmpty() 判断是否为空字符串 "".isEmpty()true
isBlank() (Java 11+) 判断是否为空白(空格、空串) " ".isBlank()true
equals(Object obj) 比较内容是否相等 "abc".equals("abc")true
equalsIgnoreCase(String) 忽略大小写比较 "ABC".equalsIgnoreCase("abc")true
startsWith(String prefix) 判断是否以某前缀开头 "Hello".startsWith("He")true
endsWith(String suffix) 判断是否以某后缀结尾 "Hello".endsWith("lo")true
contains(CharSequence s) 判断是否包含子串 "Hello".contains("ell")true
② 获取类方法
方法 描述 示例
charAt(int index) 获取指定位置的字符 "Hello".charAt(1)'e'
indexOf(String str) 返回子串首次出现的位置 "Hello".indexOf("l")2
lastIndexOf(String str) 返回子串最后一次出现的位置 "Hello".lastIndexOf("l")3
substring(int beginIndex) 截取子串(从beginIndex到末尾) "Hello".substring(2)"llo"
substring(int begin, int end) 截取子串([begin, end)) "Hello".substring(1, 4)"ell"
③ 转换类方法
方法 描述 示例
toUpperCase() 转换为大写 "Hello".toUpperCase()"HELLO"
toLowerCase() 转换为小写 "Hello".toLowerCase()"hello"
trim() 去除首尾空白 " Hi ".trim()"Hi"
strip() (Java 11+) 去除首尾空白(支持Unicode) " Hi ".strip()"Hi"
replace(char old, char new) 替换所有字符 "Hello".replace('l', 'w')"Hewwo"
replaceAll(String regex, String replacement) 使用正则替换 "a1b2c3".replaceAll("\\d", "")"abc"
split(String regex) 按正则分割成数组 "a,b,c".split(",")["a","b","c"]
toCharArray() 转换为字符数组 "Hi".toCharArray()['H','i']
④ 其他实用方法
方法 描述 示例
concat(String str) 拼接字符串 "Hello".concat(" World")"Hello World"
join(CharSequence delimiter, CharSequence... elements) (静态) 用分隔符连接多个字符串 String.join("-", "a","b","c")"a-b-c"
repeat(int count) (Java 11+) 重复字符串n次 "Hi".repeat(3)"HiHiHi"
indent(int n) (Java 12+) 调整缩进
lines() (Java 11+) 按行分割成Stream

Character vs String 核心区别

特性 Character String
作用 处理单个字符 处理字符串(字符序列)
类型 char 的包装类 独立的类
不可变性 包装对象不可变,但 char 基本类型可变 完全不可变
存储内容 一个字符 多个字符(char数组)
常用操作 判断字符类型、大小写转换 截取、查找、替换、分割
内存 较小(16位 + 对象头) 较大(字符数组 + 对象头)
比较方式 基本类型用 ==,包装类用 equals() 内容比较用 equals(),地址比较用 ==
相关推荐
csbysj20202 小时前
《C 标准库 - 参考手册》
开发语言
APIshop2 小时前
京东关键词搜索接口完全指南
java·开发语言·数据库
东离与糖宝2 小时前
HashMap从入门到源码:Java7/8/21区别+面试陷阱+高频追问合集
java·人工智能·面试
追雨潮2 小时前
BGE-M3 多语言向量模型实战:.NET C# 从原理到落地
开发语言·c#·.net
海天一色y2 小时前
三分支声学超结构传输特性计算:格林函数法的完整MATLAB实现与深度解析
开发语言·matlab
喜欢喝果茶.2 小时前
Qt翻译接口 -逐条翻译(免费级)
开发语言·python
顶点多余2 小时前
QT-设计师模式基本知识
开发语言·qt
南 阳2 小时前
Python从入门到精通day60
开发语言·python
不知名的老吴2 小时前
返回多个值:让函数输出更丰富又不复杂
开发语言·python