去掉所有出现的子字符串(最常见)
这是最直接的理解:从一个主字符串中,移除所有与目标子字符串完全匹配的部分。

核心方法: 使用 String.replace() 或 String.replaceAll()。
方法 1:使用 String.replace(CharSequence target, CharSequence replacement)
这个方法会替换掉字符串中所有出现的 target,如果我们想“去掉”它,只需将其替换为一个空字符串 即可。
- 特点:
target是一个普通的字符串字面量,不需要特殊字符转义。
public class RemoveSubstring {
public static void main(String[] args) {
String originalString = "Hello Java, Java is fun, Java is powerful.";
String substringToRemove = "Java";
// 使用 replace 方法,将 "Java" 替换为空字符串 ""
String resultString = originalString.replace(substringToRemove, "");
System.out.println("原始字符串: " + originalString);
System.out.println("去掉 '" + substringToRemove + "' 后的字符串: " + resultString);
// 输出: 原始字符串: Hello Java, Java is fun, Java is powerful.
// 输出: 去掉 'Java' 后的字符串: Hello , is fun, is powerful.
}
}
方法 2:使用 String.replaceAll(String regex, String replacement)
这个方法使用正则表达式来匹配要替换的内容,如果我们想替换一个固定的字符串,同样可以将其替换为空字符串 。
- 特点:
regex是一个正则表达式。substringToRemove中包含正则表达式中的特殊字符(如^\[]),你需要对它们进行转义(在前面加\)。
public class RemoveSubstringWithRegex {
public static void main(String[] args) {
String originalString = "The price is $100.50, and the discount is $20.00.";
String substringToRemove = "$"; // 这是一个正则表达式中的特殊字符
// 如果直接使用 replaceAll,会报错或产生非预期结果,因为 $ 匹配行尾
// 所以需要转义,使用 "\\$"
String resultString = originalString.replaceAll("\\$", ""); // 反斜杠本身在字符串中需要用 "\\" 表示
System.out.println("原始字符串: " + originalString);
System.out.println("去掉 '" + substringToRemove + "' 后的字符串: " + resultString);
// 输出: 原始字符串: The price is $100.50, and the discount is $20.00.
// 输出: 去掉 '$' 后的字符串: The price is 100.50, and the discount is 20.00.
}
}
小结:

- 对于简单的、不含特殊字符的子字符串,
replace()更简单直接。 - 如果子字符串可能包含特殊字符,或者你本身就打算用正则表达式匹配更复杂的模式,请使用
replaceAll()并记得转义。
去掉与某个模式匹配的内容(使用正则表达式)
这个场景更强大,我们不需要精确匹配一个字符串,而是匹配一个“模式”,去掉所有数字,或者去掉所有 HTML 标签。
核心方法: String.replaceAll(String regex, String replacement)。
public class RemovePattern {
public static void main(String[] args) {
String originalString1 = "My phone number is 123-456-7890 and my zip is 90210.";
// 去掉所有数字 (正则表达式 \d 表示任意数字)
String result1 = originalString1.replaceAll("\\d", "");
System.out.println("去掉所有数字: " + result1);
// 输出: 去掉所有数字: My phone number is --- and my zip is .
String originalString2 = "<p>This is a <b>bold</b> text.</p>";
// 去掉所有 HTML 标签 (正则表达式 <[^>]*> 表示 < 开头,> 中间是任意非 > 的字符)
String result2 = originalString2.replaceAll("<[^>]*>", "");
System.out.println("去掉所有 HTML 标签: " + result2);
// 输出: 去掉所有 HTML 标签: This is a bold text.
}
}
去掉指定位置和长度的字符串
这个场景是:我知道要去掉的子字符串的起始位置和长度,而不是它的内容。
核心方法: 使用 String.substring(int beginIndex, int endIndex)。

public class RemoveByIndex {
public static void main(String[] args) {
String originalString = "Hello, beautiful World!";
// 去掉从索引 7 开始,长度为 9 的子字符串 ("beautiful")
int startIndex = 7;
int lengthToRemove = 9;
// 构建结果 = 前半部分 + 后半部分
String resultString = originalString.substring(0, startIndex)
+ originalString.substring(startIndex + lengthToRemove);
System.out.println("原始字符串: " + originalString);
System.out.println("去掉从索引 " + startIndex + " 开始,长度为 " + lengthToRemove + " 的字符串后: " + resultString);
// 输出: 原始字符串: Hello, beautiful World!
// 输出: 去掉从索引 7 开始,长度为 9 的字符串后: Hello, World!
}
}
从字符串两端去掉特定字符(去除空白符)
这个场景通常指去除字符串开头和结尾的特定字符,最常见的是去除空格、制表符、换行符等空白符。
核心方法:
String.trim(): 专门用于去除两端的空白字符(包括空格、制表符\t、换行符\n等)。String.strip(): Java 11 引入,功能与trim()类似,但能更好地处理 Unicode 空白字符。String.stripLeading()/String.stripTrailing(): 分别只去除开头或结尾的空白符。
public class TrimString {
public static void main(String[] args) {
String stringWithSpaces = " Hello Java World \n";
// 1. 使用 trim() 去除两端所有空白符
String trimmed = stringWithSpaces.trim();
System.out.println("使用 trim(): '" + trimmed + "'");
// 输出: 使用 trim(): 'Hello Java World'
// 2. 使用 strip() (推荐,尤其在处理国际化文本时)
String stripped = stringWithSpaces.strip();
System.out.println("使用 strip(): '" + stripped + "'");
// 输出: 使用 strip(): 'Hello Java World'
// 3. 只去除开头的空白符
String leadingTrimmed = stringWithSpaces.stripLeading();
System.out.println("使用 stripLeading(): '" + leadingTrimmed + "'");
// 输出: 使用 stripLeading(): 'Hello Java World \n'
// 4. 只去除结尾的空白符
String trailingTrimmed = stringWithSpaces.stripTrailing();
System.out.println("使用 stripTrailing(): '" + trailingTrimmed + "'");
// 输出: 使用 stripTrailing(): ' Hello Java World'
}
}
总结与推荐
| 你的目标 | 推荐方法 | 示例 |
|---|---|---|
| 去掉所有出现的固定子字符串 | original.replace("target", "") |
"abc123abc".replace("abc", "") -> "123" |
| 去掉所有匹配正则表达式的模式 | original.replaceAll("regex", "") |
"a1b2c3".replaceAll("\\d", "") -> "abc" |
| 去掉指定位置和长度的内容 | original.substring(0, start) + original.substring(start + len) |
"abcdef".substring(0, 1) + "abcdef".substring(3) -> "adef" |
| 去掉字符串两端的空白符 | original.trim() 或 original.strip() |
" text ".trim() -> "text" |
根据你的具体需求,选择最合适的方法即可,对于初学者,场景一 和 场景四 是最常用和最重要的。
