杰瑞科技汇

Java字符串如何替换指定字符?

  • 替换所有匹配项 还是 只替换第一个匹配项
  • 是替换单个字符 还是一个子字符串
  • 是否需要考虑大小写
  • 是否需要使用复杂的模式(正则表达式)

下面我将详细介绍最常用和最核心的几种方法。

Java字符串如何替换指定字符?-图1
(图片来源网络,侵删)

String.replace() 方法

这是最常用、最简单的方法,用于替换字符串中的子字符串

特点:

  • 替换所有出现的子字符串。
  • 参数是 CharSequence,可以是 Stringchar
  • 返回一个新的字符串,原始字符串不会被修改(因为 String 在 Java 中是不可变的)。

方法签名:

public String replace(CharSequence target, CharSequence replacement)

示例代码:

场景1:替换所有匹配的子字符串

public class ReplaceExample {
    public static void main(String[] args) {
        String str = "hello world, hello java, hello everyone";
        // 将所有的 "hello" 替换为 "hi"
        String newStr = str.replace("hello", "hi");
        System.out.println("原始字符串: " + str);
        System.out.println("替换后字符串: " + newStr);
        // 输出:
        // 原始字符串: hello world, hello java, hello everyone
        // 替换后字符串: hi world, hi java, hi everyone
    }
}

场景2:替换所有匹配的单个字符

public class ReplaceCharExample {
    public static void main(String[] args) {
        String str = "apple-pie-recipe";
        // 将所有的 '-' 替换为 ' '
        String newStr = str.replace('-', ' ');
        System.out.println("原始字符串: " + str);
        System.out.println("替换后字符串: " + newStr);
        // 输出:
        // 原始字符串: apple-pie-recipe
        // 替换后字符串: apple pie recipe
    }
}

String.replaceFirst() 方法

如果你只想替换第一个匹配的子字符串,可以使用这个方法。

Java字符串如何替换指定字符?-图2
(图片来源网络,侵删)

特点:

  • 只替换第一个匹配项。
  • 同样使用 CharSequence 作为参数。

方法签名:

public String replaceFirst(String regex, String replacement)

注意:这里的第一个参数是 regex,意味着你可以使用正则表达式来定位要替换的子字符串。

示例代码:

public class ReplaceFirstExample {
    public static void main(String[] args) {
        String str = "hello world, hello java, hello everyone";
        // 只替换第一个 "hello"
        String newStr = str.replaceFirst("hello", "hi");
        System.out.println("原始字符串: " + str);
        System.out.println("替换后字符串: " + newStr);
        // 输出:
        // 原始字符串: hello world, hello java, hello everyone
        // 替换后字符串: hi world, hello java, hello everyone
    }
}

String.replaceAll() 方法

这个方法功能非常强大,它使用正则表达式来查找并替换所有匹配的子字符串。

特点:

  • 替换所有匹配的子字符串。
  • 必须使用正则表达式作为第一个参数。
  • 如果要替换的字符串中包含正则表达式的特殊字符(如 , , 等),需要进行转义。

方法签名:

public String replaceAll(String regex, String replacement)

示例代码:

场景1:简单的正则表达式替换

public class ReplaceAllExample {
    public static void main(String[] args) {
        String str = "order123, order456, order789";
        // 使用正则表达式 "order\\d+" 来匹配 "order" 后面跟着一个或多个数字
        String newStr = str.replaceAll("order\\d+", "shipped");
        System.out.println("原始字符串: " + str);
        System.out.println("替换后字符串: " + newStr);
        // 输出:
        // 原始字符串: order123, order456, order789
        // 替换后字符串: shipped, shipped, shipped
    }
}

场景2:转义正则表达式特殊字符

Java字符串如何替换指定字符?-图3
(图片来源网络,侵删)

假设你想替换一个点 ,在正则表达式中 代表任意字符,所以需要用 \\ 进行转义。

public class ReplaceAllEscapeExample {
    public static void main(String[] args) {
        String str = "file.txt.bak";
        // 错误示范:. 会匹配任意字符,导致结果不符合预期
        // String wrongResult = str.replaceAll(".", "_"); // 输出: _______________
        // 正确示范:使用 \\\. 来匹配一个真实的点字符
        String newStr = str.replaceAll("\\.", "_");
        System.out.println("原始字符串: " + str);
        System.out.println("替换后字符串: " + newStr);
        // 输出:
        // 原始字符串: file.txt.bak
        // 替换后字符串: file_txt_bak
    }
}

StringBuilder.replace() 方法

如果你需要在循环或高频操作中频繁修改字符串内容,使用 StringBuilderStringBuffer 会更高效,因为它们是可变的。

特点:

  • StringBuilderStringBuffer 对象上进行原地修改
  • 参数是 int 类型的起始索引结束索引,以及要替换的 String
  • 索引范围是 [start, end),即包含 start,不包含 end

方法签名:

public StringBuilder replace(int start, int end, String str)

示例代码:

public class StringBuilderReplaceExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello, World!");
        // 将索引 7 到 12 (即 "World") 替换为 "Java"
        // 7: 'W' 的索引
        // 12: '!' 的索引
        sb.replace(7, 12, "Java");
        System.out.println("替换后的内容: " + sb.toString());
        // 输出:
        // 替换后的内容: Hello, Java!
    }
}

总结与选择指南

方法 替换所有? 替换单个字符? 正则表达式? 是否修改原字符串 适用场景
String.replace() 否 (返回新串) 最常用,简单的全局替换。
String.replaceFirst() 否 (返回新串) 只需要替换第一个匹配项,或用正则定位特定位置。
String.replaceAll() 否 (返回新串) 需要基于复杂模式(正则)进行全局替换。
StringBuilder.replace() N/A N/A (修改原对象) 在循环或高频操作中,为了性能,需要频繁修改字符串内容。

如何选择?

  1. 简单替换所有字符/子串:首选 String.replace(),它最直观、简单。
  2. 只替换第一个:使用 String.replaceFirst()
  3. 需要匹配复杂模式(替换所有数字、所有空格等):使用 String.replaceAll() 并编写正则表达式。
  4. 在循环中多次修改字符串:使用 StringBuilderStringBufferreplace() 方法,以避免创建过多临时字符串对象,提高性能。
分享:
扫描分享到社交APP
上一篇
下一篇