字符串处理--笔记

思考:对于一个字符串,常用的操作有查找、替换、删除子串,那么该如何操作呢?
我的第一反应是:正则表达式匹配后再操作,实际上呢?先看下面几个源码:

string replaceAll()和replace()源码:

 public String replaceAll(String regex, String replacement) {
        return Pattern.compile(regex).matcher(this).replaceAll(replacement);
    }
 public String replace(CharSequence target, CharSequence replacement) {
        return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(
                this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
    }

可以看到,String类提供的两个替换子串的源码均使用的是正则表达式

StringBuffer replace()方法源码:

public AbstractStringBuilder replace(int start, int end, String str) {
        if (start < 0)
            throw new StringIndexOutOfBoundsException(start);
        if (start > count)  //count为StringBuffer的容量
            throw new StringIndexOutOfBoundsException("start > length()");
        if (start > end)
            throw new StringIndexOutOfBoundsException("start > end");

        if (end > count)
            end = count;
        int len = str.length();
        int newCount = count + len - (end - start);
        ensureCapacityInternal(newCount);
//下面才是巧妙之处:对同一个char数组的在不同位置上进行拷贝和粘贴,实现数组的扩容,然后再将要替换的内容插入扩容后预留的位置处即可
        System.arraycopy(value, end, value, start + len, count - end);
        str.getChars(value, start);
        count = newCount;
        return this;
    }

而StringBuffer替换子串使用的是System.arraycopy()和String.getChars()这两个方法的灵活运用。

例题:请实现一个函数,将一个字符串中的空格替换成“%20”(牛客网上的一道题)
解法:1,可以利用正则表达式将匹配字符串中的空格后在替换
2,可以将字符串存入StringBuffer里,然后遍历一次,遇到空格替换即可

你可能感兴趣的:(JAVA)