JAVA字符串中空格挖的坑

需求:

已知输入字符串str,如果str不存在或只有【空格、“无”、“空”】时即为空字符串。


 

解答过程:

1. 单纯的解答

直接用replace把空格、“空”、“无”替换掉,然后再判断字符串的长度是否为零,

 1     public static boolean isBlank(String str) {
 2         if (str == null) {
 3             return true;
 4 
 5         }
 6         String newStr = str.replace(" ", "")
 7             .replace("空", "")
 8             .replace("无", "");
 9         return newStr.length() == 0 && !containsText(newStr);
10     }
11 
12     private static boolean containsText(CharSequence str) {
13         int strLen = str.length();
14         for (int i = 0; i < strLen; i++) {
15             if (!Character.isWhitespace(str.charAt(i))) {
16                 return true;
17             }
18         }
19         return false;
20     }

原本以为这样就可以了,然后,然后,直到测试用例出现无论怎么输入,最后的字符串长度总是2,且是两个空格。

测试案例:

String str = "<p>  </p>";
String str2 = "<p>  </p>";

表面上看来这两个没什么问题,当我们把它们转化为ASCII码后再看

    public String stringToAscii (String value) {
        StringBuilder sbu = new StringBuilder();
        char[] chars = value.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            if(i != chars.length - 1)
            {
                sbu.append((int)chars[i]).append(",");
            }
            else {
                sbu.append((int)chars[i]);
            }
        }
        return sbu.toString();
    }

结果:

 

 

 没错,它俩其实完全不一样!

解决方案:

 1     public static boolean isBlank(String str) {
 2         if (str == null) {
 3             return true;
 4 
 5         }
 6         String newStr = str.replace(" ", "")
 7             .replace("空", "")
 8             .replace("无", "")
 9             .replaceAll("\\u00A0", "");
10         return newStr.length() == 0 && containsText(newStr);
11     }

加个正则“

\\u00A0

”就可以替换掉ASCII码为160的空格了。

posted @ 2021-05-21 16:38  从零开始的0  阅读(410)  评论(0编辑  收藏  举报