跳到主要内容

Java 字符串方法

在Java编程中,字符串(String)是最常用的数据类型之一。Java提供了丰富的字符串处理方法,使开发者能够轻松地操作和处理文本数据。本文将详细介绍Java中常用的字符串方法,帮助初学者更好地理解和使用这些功能。

字符串基础

在深入了解字符串方法之前,让我们先简单回顾一下Java中的字符串特性:

  • 字符串在Java中是不可变的(immutable)
  • 字符串实际上是char数组的封装
  • Java中的字符串是String类的对象
  • Java字符串支持Unicode字符集
提示

Java中的字符串一旦创建,就不能修改。所有字符串操作方法实际上都是创建新的字符串对象,而不是修改原有对象。

常用字符串方法

1. 字符串长度

length()方法返回字符串中的字符数量:

java
String greeting = "Hello, World!";
int length = greeting.length(); // 返回13
System.out.println("字符串长度: " + length);

输出:

字符串长度: 13

2. 字符串连接

a. 使用+运算符

java
String firstName = "John";
String lastName = "Doe";
String fullName = firstName + " " + lastName;
System.out.println(fullName); // 输出: John Doe

b. 使用concat()方法

java
String str1 = "Hello";
String str2 = "World";
String result = str1.concat(" ").concat(str2);
System.out.println(result); // 输出: Hello World

3. 字符串比较

a. equals()方法

比较两个字符串的内容是否相同:

java
String str1 = "Hello";
String str2 = "hello";
String str3 = "Hello";

System.out.println(str1.equals(str2)); // 输出: false
System.out.println(str1.equals(str3)); // 输出: true

b. equalsIgnoreCase()方法

比较两个字符串的内容是否相同,忽略大小写:

java
String str1 = "Hello";
String str2 = "hello";

System.out.println(str1.equalsIgnoreCase(str2)); // 输出: true

c. compareTo()方法

按字典顺序比较两个字符串:

java
String str1 = "apple";
String str2 = "banana";
String str3 = "apple";

System.out.println(str1.compareTo(str2)); // 输出负数,因为apple在banana之前
System.out.println(str2.compareTo(str1)); // 输出正数,因为banana在apple之后
System.out.println(str1.compareTo(str3)); // 输出0,因为两个字符串相同

4. 字符和子字符串检索

a. charAt()方法

返回指定索引处的字符:

java
String text = "Hello";
char character = text.charAt(1); // 返回'e'
System.out.println("索引1处的字符是: " + character);

输出:

索引1处的字符是: e
警告

索引从0开始计数。尝试访问超出范围的索引将抛出StringIndexOutOfBoundsException

b. indexOf()方法

查找字符或子字符串第一次出现的索引位置:

java
String sentence = "Java programming is fun and practical";
int index1 = sentence.indexOf('a'); // 返回1
int index2 = sentence.indexOf("fun"); // 返回19
int index3 = sentence.indexOf('z'); // 返回-1,表示未找到

System.out.println("'a'的位置: " + index1);
System.out.println("'fun'的位置: " + index2);
System.out.println("'z'的位置: " + index3);

输出:

'a'的位置: 1
'fun'的位置: 19
'z'的位置: -1

c. lastIndexOf()方法

查找字符或子字符串最后一次出现的索引位置:

java
String text = "banana";
int lastIndex = text.lastIndexOf('a'); // 返回5
System.out.println("'a'最后出现的位置: " + lastIndex);

输出:

'a'最后出现的位置: 5

5. 字符串提取

a. substring()方法

从字符串中提取子字符串:

java
String text = "Hello, World!";
String sub1 = text.substring(7); // 从索引7到结尾,返回"World!"
String sub2 = text.substring(0, 5); // 从索引0到4,返回"Hello"

System.out.println("子字符串1: " + sub1);
System.out.println("子字符串2: " + sub2);

输出:

子字符串1: World!
子字符串2: Hello

6. 字符串修改

a. toUpperCase()和toLowerCase()方法

将字符串转换为大写或小写:

java
String text = "Hello, World!";
String upperCase = text.toUpperCase(); // 返回"HELLO, WORLD!"
String lowerCase = text.toLowerCase(); // 返回"hello, world!"

System.out.println("大写: " + upperCase);
System.out.println("小写: " + lowerCase);

输出:

大写: HELLO, WORLD!
小写: hello, world!

b. trim()方法

移除字符串两端的空白字符:

java
String text = "   Hello, World!   ";
String trimmed = text.trim(); // 返回"Hello, World!"
System.out.println("原始字符串: '" + text + "'");
System.out.println("修剪后: '" + trimmed + "'");

输出:

原始字符串: '   Hello, World!   '
修剪后: 'Hello, World!'

c. replace()方法

将字符串中的指定字符或子字符串替换为新的字符或子字符串:

java
String text = "Hello, World!";
String replaced = text.replace('o', 'O'); // 返回"HellO, WOrld!"
String replacedStr = text.replace("World", "Java"); // 返回"Hello, Java!"

System.out.println("字符替换: " + replaced);
System.out.println("子字符串替换: " + replacedStr);

输出:

字符替换: HellO, WOrld!
子字符串替换: Hello, Java!

7. 字符串检查

a. startsWith()和endsWith()方法

检查字符串是否以指定的前缀或后缀开始或结束:

java
String filename = "document.pdf";
boolean startsWithDoc = filename.startsWith("doc"); // 返回true
boolean endsWithPdf = filename.endsWith(".pdf"); // 返回true

System.out.println("是否以'doc'开始: " + startsWithDoc);
System.out.println("是否以'.pdf'结束: " + endsWithPdf);

输出:

是否以'doc'开始: true
是否以'.pdf'结束: true

b. contains()方法

检查字符串是否包含指定的子字符串:

java
String sentence = "Java编程很有趣";
boolean containsJava = sentence.contains("Java"); // 返回true
boolean containsPython = sentence.contains("Python"); // 返回false

System.out.println("是否包含'Java': " + containsJava);
System.out.println("是否包含'Python': " + containsPython);

输出:

是否包含'Java': true
是否包含'Python': false

c. isEmpty()和isBlank()方法

检查字符串是否为空或空白:

java
String empty = "";
String blank = " ";
String text = "Hello";

System.out.println("empty.isEmpty(): " + empty.isEmpty()); // true
System.out.println("blank.isEmpty(): " + blank.isEmpty()); // false
// isBlank()是Java 11引入的方法
System.out.println("blank.isBlank(): " + blank.isBlank()); // true
System.out.println("text.isBlank(): " + text.isBlank()); // false

输出:

empty.isEmpty(): true
blank.isEmpty(): false
blank.isBlank(): true
text.isBlank(): false

8. 字符串拆分与联合

a. split()方法

将字符串按照指定的分隔符拆分成字符串数组:

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

System.out.println("水果列表:");
for(String fruit : fruitArray) {
System.out.println("- " + fruit);
}

输出:

水果列表:
- apple
- banana
- orange
- grape

b. join()方法(静态方法)

将多个字符串按照指定的分隔符连接成一个字符串:

java
String[] words = {"Hello", "World", "Java"};
String joined = String.join(" ", words); // 返回"Hello World Java"
System.out.println("连接后的字符串: " + joined);

输出:

连接后的字符串: Hello World Java

实际应用案例

案例1:用户输入验证

以下是一个简单的用户名验证程序,展示了多个字符串方法的使用:

java
public class UserValidation {
public static void main(String[] args) {
String username = " John_Doe123 ";

// 移除两端空白并转换为小写
username = username.trim().toLowerCase();
System.out.println("处理后的用户名: " + username);

// 验证用户名长度
if(username.length() < 6 || username.length() > 20) {
System.out.println("用户名长度必须在6到20个字符之间");
} else {
System.out.println("用户名长度合格");
}

// 检查用户名是否包含无效字符
if(username.contains(" ")) {
System.out.println("用户名不能包含空格");
} else {
System.out.println("用户名格式正确");
}

// 检查用户名是否以字母开头
if(Character.isLetter(username.charAt(0))) {
System.out.println("用户名以字母开头,符合要求");
} else {
System.out.println("用户名必须以字母开头");
}
}
}

输出:

处理后的用户名: john_doe123
用户名长度合格
用户名格式正确
用户名以字母开头,符合要求

案例2:简单文本分析器

以下是一个简单的文本分析程序,可以计算句子中的单词数、字符数,并找出最长的单词:

java
public class TextAnalyzer {
public static void main(String[] args) {
String text = "Java is a high-level, class-based, object-oriented programming language.";

// 计算字符数(不包括空格)
int charCount = text.replace(" ", "").length();
System.out.println("字符数(不含空格): " + charCount);

// 计算单词数
String[] words = text.split("\\s+");
System.out.println("单词数: " + words.length);

// 找出最长的单词
String longestWord = "";
for(String word : words) {
// 移除标点符号
word = word.replaceAll("[^a-zA-Z]", "");
if(word.length() > longestWord.length()) {
longestWord = word;
}
}
System.out.println("最长的单词是: " + longestWord);
}
}

输出:

字符数(不含空格): 65
单词数: 9
最长的单词是: programming

总结

本文介绍了Java字符串类中最常用的方法,包括:

  • 字符串基本操作:length()、连接
  • 字符串比较:equals()equalsIgnoreCase()compareTo()
  • 字符串检索:charAt()indexOf()lastIndexOf()
  • 字符串提取:substring()
  • 字符串修改:toUpperCase()toLowerCase()trim()replace()
  • 字符串检查:startsWith()endsWith()contains()isEmpty()isBlank()
  • 字符串拆分与联合:split()join()

掌握这些方法将帮助你更有效地处理文本数据,提高Java编程效率。

练习题

为了巩固所学知识,尝试完成以下练习:

  1. 编写一个程序,统计一个字符串中某个字符出现的次数
  2. 实现一个方法,判断一个字符串是否是回文串(正读和反读相同的字符串)
  3. 编写代码,将一个句子中的单词顺序颠倒过来
  4. 实现一个简单的密码强度检查器,检查密码是否满足特定要求
  5. 创建一个程序,将驼峰命名法(camelCase)转换为蛇形命名法(snake_case)

额外资源

要进一步学习Java字符串处理,可以参考以下资源:

字符串处理是几乎所有编程任务的基础,深入理解这些方法将使你的Java编程之路更加顺畅!