使用Java中String类的方法去除字符串空格

背景

今天在做一个新增功能的时候,不小心在输入的字符串后面增加若干个空格,然后Bug袭来...具体情况是我在后端做了重复添加的校验,但是当仍然添加相同的编号,且编号后带空格,后端逻辑识别不出为同一个编号,原因是带空格。然后就把空格去掉呗,使用String类中的方法,在前一篇博客中有提到String类的常用方法,接下来使用trim()去除空格。测试后,发现trim()只能去除收尾空格(ps:我被造只能干这个事~),咋整,用String类的另一个方法replace!以下是具体总结。

 方法介绍

str.trim(); //去掉首尾空格
str.replace(" ",""); //去除所有空格,包括首尾、中间
str.replaceAll(" ", ""); //去掉所有空格,包括首尾、中间
str.replaceAll(" +","");  //去掉所有空格,包括首尾、中间
str.replaceAll("\\s*", ""); //可以替换大部分空白字符, 不限于空格 ;
\\s* 可以匹配空格、制表符、换页符等空白字符的其中任意一个。

栗子

package com.xuchen.entity;

public class Inchlifc {
    /**
     * @description: 去除字符串空格的方法
     */
    public static void main(String[] args) {
        String str = "   小小  渔夫    ";
        //方法1:str.trim()
        System.out.println("1去除首尾空格--->"+str.trim());
        //方法2:str.repalce(" ","")
        System.out.println("2去除所有空格--->"+str.replace(" ", ""));
        //方法3:str.repalceAll(" ","")
        System.out.println("3去除所有空格--->"+str.replaceAll(" ", ""));
        //方法4:str.repalceAll(" +","")
        System.out.println("4去除所有空格--->"+str.replaceAll(" +", ""));
        //方法5:str.repalceAll("\\s*","")
        //\\s* 可以匹配空格、制表符、换页符等空白字符的其中任意一个。
        System.out.println("4去除所有空格--->"+str.replaceAll("\\s*", ""));
    }
}

结果

使用Java中String类的方法去除字符串空格_第1张图片

附录:replace和replaceAll区别

查看源码

public String replace(char oldChar, char newChar) {
        if (oldChar != newChar) {
            int len = value.length;
            int i = -1;
            char[] val = value; /* avoid getfield opcode */

            while (++i < len) {
                if (val[i] == oldChar) {
                    break;
                }
            }
            if (i < len) {
                char buf[] = new char[len];
                for (int j = 0; j < i; j++) {
                    buf[j] = val[j];
                }
                while (i < len) {
                    char c = val[i];
                    buf[i] = (c == oldChar) ? newChar : c;
                    i++;
                }
                return new String(buf, true);
            }
        }
        return this;
    }

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

public String replaceAll(String regex, String replacement) {
    return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}

结论

经查看源码我们可以得知:

replace的参数是char和CharSequence,既可以支持字符的替换,也支持字符串的替换(CharSequence即字符串序列的意思,说白了也就是字符串);
replaceAll的参数是regex,也就是基于规则表达式的替换,比如,可以通过replaceAll("\\d", "*")把一个字符串所有的数字字符都换成星号;
相同点:都是全部替换,即把源字符串中的某一字符或字符串全部换成指定的字符或字符串,如果只想替换第一次出现的,可以使用 replaceFirst(),这个方法也是基于规则表达式的替换,但与replaceAll()不同的时,只替换第一次出现的字符串。

你可能感兴趣的:(2-------Java)