千家信息网

java字符串替换如何实现

发表于:2024-10-02 作者:千家信息网编辑
千家信息网最后更新 2024年10月02日,这篇文章主要介绍"java字符串替换如何实现"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"java字符串替换如何实现"文章能帮助大家解决问题。字符串处理在程序
千家信息网最后更新 2024年10月02日java字符串替换如何实现

这篇文章主要介绍"java字符串替换如何实现"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"java字符串替换如何实现"文章能帮助大家解决问题。

字符串处理在程序猿日常工作工作中非常常见,常见到几乎各种语言中都已经封装好了字符串相关的API,我们只需要直接拿过来用就好。就拿Java为例,jdk中的String()类几乎封装了所有字符串相关的操作,其方法数量有近百个,几乎满足了程序猿所有字符串相关的操作。
正是因为这么方便,估计大多数Java程序猿都没自己实现过字符串的replace。这里正式引入一下今天的精选面试题:不依赖第三方库 实现一个字符串替换replace(String str, String target, String replacement)函数,其功能是将str中所有的target替换为replacement。 其实这道题并不涉及任何复杂或者高深的算法,只需要掌握基本的编程就可以做,但当我某次把这道题拿出来面试某个应届生时,他代码写的磕磕绊绊的,后来我也陆陆续续用这题考过好几个人,鲜有顺畅写出来的,是我低估了这道题的难度??

解题思路

回到题目本身,我多说两句,仔细想想这道题其实也很简单,然而这就难倒了一大批人,大家刷面试题前还是要先打好编程基础。 这题的解题思路也很简单,我们新建个StringBuilder,只需要把str中不是target的部分加进去,如果是遇到target,就把replacement字符串加进去,真的没有任何复杂的算法 就是单纯考你编程的基本功,代码如下。

    public static String replace(String str, String target, String replacement) {        // 正常这里需要对str,target,replacement做输入校验,这里我省略, 比如str比target端的时候可以直接返回空字符串          StringBuilder res = new StringBuilder();        for (int i = 0; i < str.length(); ) {            if (isMatch(str, i, target)) {                i += target.length();  // 如果匹配,需要直接向前跳target.length                  res.append(replacement);                continue;            }            res.append(str.charAt(i++));        }        return res.toString();    }    // 单纯确认从str的pos位置开始,是否和target相匹配      private static boolean isMatch(String str, int pos, String target) {        for (int i = 0; i < target.length() && i + pos < str.length(); i++) {            if (str.charAt(i + pos) != target.charAt(i)) {                return false;            }        }        return true;    }

看吧,代码其实没啥难度,但咋就好多明显刷过其他面试题的人都不会呢!!!

Jdk中的replace实现

估计大多数人都没看过Jdk中的实现,所以顺带我们来欣赏下java String类中的replace方法是如何实现的。

    public String replace(CharSequence target, CharSequence replacement) {        String tgtStr = target.toString();        String replStr = replacement.toString();        int j = indexOf(tgtStr);        if (j < 0) {            return this;        }        int tgtLen = tgtStr.length();        int tgtLen1 = Math.max(tgtLen, 1);        int thisLen = length();        int newLenHint = thisLen - tgtLen + replStr.length();        if (newLenHint < 0) {            throw new OutOfMemoryError();        }        StringBuilder sb = new StringBuilder(newLenHint);        int i = 0;        do {            sb.append(this, i, j).append(replStr);   // 先把未匹配字符添加进去,然后直接添加replStr              i = j + tgtLen;        } while (j < thisLen && (j = indexOf(tgtStr, j + tgtLen1)) > 0);  // 找到下一个匹配的下标         return sb.append(this, i, thisLen).toString();    }

jdk中的思路和我们上面写的思路是一致的,但jdk的代码更为精简,其实jdk也没用啥高深的东西,只是在indexOf()中考虑了更多数据编码的问题。

关于"java字符串替换如何实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

0