您的位置:

Java实现字符串替换

一、基本概念

字符串替换是指替换一段文本中的某些内容为另外一些内容,通常应用在编辑器、网络通信、文本分析等场景中。Java提供了多种方式实现字符串替换,本文将从基本概念、Java提供的API方法、正则表达式、自定义实现四方面对其进行详细介绍。

二、Java提供的API方法

Java字符串提供了replace、replaceAll、replaceFirst三个方法进行简单的字符串替换操作。

replace(char oldChar, char newChar)

    /**
     * 返回一个字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。 
     */
    public String replace(char oldChar, char newChar) {
        char[] value = this.value;
        int len = value.length;
        int i = -1;
        while (++i < len) {
            if (value[i] == oldChar)
                break;
        }
        if (i < len) {
            char buf[] = new char[len];
            for (int j = 0; j < i; j++)
                buf[j] = value[j];
            for (; i < len; i++) {
                char c = value[i];
                buf[i] = (c == oldChar) ? newChar : c;
            }
            return new String(buf, true);
        }
        return this;
    }

replace(CharSequence target, CharSequence replacement)

    /**
     * 返回一个新的字符串,它是通过用 newChar 替换此字符串中所有 occurrence 字符串
     * 得到的。 
     */
    public String replace(CharSequence target, CharSequence replacement) {
        if (target == null) {
            throw new NullPointerException("target == null");
        }
        if (replacement == null) {
            throw new NullPointerException("replacement == null");
        }
        String tgtStr = target.toString();
        int tgtLen = tgtStr.length();
        if (tgtLen == 0) {
            StringBuilder sb = new StringBuilder(replacement.length() * (value.length + 2));
            sb.append(replacement);
            for (int i = 0; i < value.length; i++) {
                sb.append(value[i]);
                sb.append(replacement);
            }
            return sb.toString();
        }
        StringBuilder sb = null;
        int i = 0;
        while (i < value.length) {
            int j = indexOf(value, i, tgtStr);
            if (j == -1) {
                break;
            }
            if (sb == null) {
                sb = new StringBuilder(value.length + 16 * tgtLen);
            }
            sb.append(value, i, j-i);
            sb.append(replacement);
            i = j + tgtLen;
        }
        if (sb == null) {
            return this;
        }
        sb.append(value, i, value.length- i);
        return sb.toString();
    }

replaceAll(String regex, String replacement)

    /**
     * 使用给定的字面值替换此字符串中所有匹配字面值目标序列的子字符串。
     */
    public String replaceAll(String regex, String replacement) {
        return Pattern.compile(regex).matcher(this).replaceAll(replacement);
    }

replaceFirst(String regex, String replacement)

    /**
     * 使用给定的字面值替换此字符串匹配给定的正则表达式的第一个子字符串。
     */
    public String replaceFirst(String regex, String replacement) {
        return Pattern.compile(regex).matcher(this).replaceFirst(replacement);
    }

三、正则表达式

在Java中,使用正则表达式进行复杂的字符串替换操作。具体步骤如下:

1、定义Pattern对象

Pattern类是正则表达式的编译表示,给定一个正则表达式,可以使用Pattern.compile方法生成一个Pattern对象。

    Pattern pattern = Pattern.compile("Hello");  //定义一个模式

2、定义Matcher对象

Matcher类是用于匹配字符串的对象,给定待匹配的字符串,使用Pattern.matcher方法生成一个Matcher对象。

    Matcher matcher = pattern.matcher("Hello Java"); //定义一个匹配者
    System.out.println(matcher.find());  //true

3、执行替换操作

Matcher类提供了replaceFirst、replaceAll、appendReplacement和appendTail等方法进行替换操作。

    String newStr = matcher.replaceAll("Hi");
    System.out.println(newStr); //Hi Java

四、自定义实现

除了Java自带的API和正则表达式外,我们也可以自定义实现字符串替换。

    public static String replace(String str, String searchStr, String replaceStr) {
        StringBuilder sb = new StringBuilder();
        int index = 0;
        while (true) {
            int i = str.indexOf(searchStr, index);
            if (i == -1) {
                sb.append(str, index, str.length());
                break;
            }
            sb.append(str, index, i);
            sb.append(replaceStr);
            index = i + searchStr.length();
        }
        return sb.toString();
    }

总结

本文介绍了Java实现字符串替换的基本概念、Java提供的API方法、正则表达式、自定义实现四个方面,并给出了相应代码示例。学习完本文可以更好地掌握Java字符串替换的基本知识。