📢📢📢📣📣📣
哈喽!大家好,我是「奇点」,江湖人称 singularity。刚工作几年,想和大家一同进步🤝🤝
一位上进心十足的【Java ToB端大厂领域博主】!😜😜😜
喜欢java和python,平时比较懒,能用程序解决的坚决不手动解决😜😜😜

✨ 如果有对【java】感兴趣的【小可爱】,欢迎关注我

❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️
————————————————

如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。

字符串是我们最常用的一个数据类型,对字符的操作再熟悉不过了,今天我就自己根据trim函数写了一个更加一般的转换方法,能够将字符串中的指定的字符首位去掉。现在就记录一下这个实现的方法最简单的思路就是找到开始和结尾的起始位置和结束位置的下标,再进行截取就实现了这个功能了。我们都能想到这个实现方法,但是上来就写可能出现想不到的问题。于是在网上找了一个比较多的实现方法,供大家参考。之后根据trim方法进行了改进又实现了一个方法。

 

目录

trim函数实现

实现方法1:

实现方法2:

特殊字符的转义


trim函数实现

 首先我们先看一看trim函数实现的方法

public String trim() {
        int len = value.length;
        int st = 0;
        char[] val = value;    /* avoid getfield opcode */

        while ((st < len) && (val[st] <= ' ')) {
            st++;
        }
        while ((st < len) && (val[len - 1] <= ' ')) {
            len--;
        }
        return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
    }

先写了一个简单的demo,看一下trim的实现方法字符串是"  newArch "这个字符串有三个空格

 

 这里是找到出现指定空格的下标,之后根据下标对字符进行截取。

由于项目着急这里在网上找了一个demo就暂时使用这个方法了。

实现方法1:

public static String trimFirstAndLastChar(String source, char element) {
        if (StringUtils.isBlank(source)) {
            return "";
        }

        boolean beginIndexFlag = true;

        boolean endIndexFlag = true;

        do {
            //是否是从开始就有这个替换的字符,如果是则从1开始
            int beginIndex = source.indexOf(element) == 0 ? 1 : 0;
            //最后一个是否是要替换的字符。 是的话记录最后一个需要替换的地方
            int endIndex = source.lastIndexOf(element) + 1 == source.length() ? source.lastIndexOf(element) : source.length();

            source = source.substring(beginIndex, endIndex);

            beginIndexFlag = (source.indexOf(element) == 0);

            endIndexFlag = (source.lastIndexOf(element) + 1 == source.length());

        } while (beginIndexFlag || endIndexFlag);

        return source;

    }

 

如果前面都找完之后, 将之前的开始标记为false

 同理结束的标记也是这里

如果都为false则说明整个文件都去掉了,删错指定的字符成功。返回结果 

 

上面的这个方法是在网上找的现成代码,进行了稍微修改

实现方法2:

之前看了trim的方法,现在我们根据trim的方法再写一版实现吧。毕竟trim方法经过了大量的风吹日晒,肯定没啥问题,网上那个实现我们就不能保证了。

public class Main {
    public static void main(String[] args) {
        String s = new Main().trimAny("'ssafasfasf'''", '\'');
        System.out.println(s);
    }


    public String trimAny(String source, char element) {

        if (StringUtils.isBlank(source)) {
            return "";
        }
        char[] value = source.toCharArray();
        int len = value.length;
        int st = 0;
        /* avoid getfield opcode */
        char[] val = value;    
        //从左边找
        while ((st < len) && (val[st] <= element)) {
            st++;
        }
        //从右边找
        while ((st < len) && (val[len - 1] <= element)) {
            len--;
        }
        //如果找到了就截取,否则返回原值
        return ((st > 0) || (len < value.length)) ? substring(st, len, value) : source;
    }

    public String substring(int beginIndex, int endIndex, char[] value) {
        if (beginIndex < 0) {
            throw new StringIndexOutOfBoundsException(beginIndex);
        }
        if (endIndex > value.length) {
            throw new StringIndexOutOfBoundsException(endIndex);
        }
        int subLen = endIndex - beginIndex;
        if (subLen < 0) {
            throw new StringIndexOutOfBoundsException(subLen);
        }
        return ((beginIndex == 0) && (endIndex == value.length)) ? new String(value)
                : new String(value, beginIndex, subLen);
    }


}

 

 

特殊字符的转义

 如果觉得本文对你有帮助,欢迎点赞,欢迎关注我,如果有补充欢迎评论交流,我将努力创作更多更好的文章。

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐