一、问题背景
在用poi做导入的时候发现,用户提供的excel里的某些字段总是多了一些空格。
于是用String自带的trim()去重,发现结果还是有空格。一下几种方法都试过,然并卵。
String str = " Hello Word! "; //方法1:String.trim();trim()是去掉首尾空格 System.out.println("1:"+str.trim()); //方法2:str.replaceAll(" ", ""); 去掉所有空格,包括首尾、中间 String str2 = str.replaceAll(" ", ""); System.out.println("2:"+str2); //方法3:或者replaceAll(" +",""); 去掉所有空格,包括首尾、中间 String str3 = str.replaceAll(" +", ""); System.out.println("3:"+str3); //方法4:、str = .replaceAll("\\s*", "");可以替换大部分空白字符, 不限于空格 ; \s 可以匹配空格、制表符、换页符等空白字符的其中任意一个。 String str4 = str.replaceAll("\\s*", ""); System.out.println("4:"+str4);
二、问题解答
查看String的trim()方法的源码。
发现JAVA去重将字符串截成char数组,然后一个个char循环去跟‘ ’比大小(这里是ASCll码作对比)。
于是把poi导入的字符串截成char数组,查看poi的空格的ASCll码。
通过调试发现poi导入的字符串空格ASCll值:160,而空格(Space)的ASCII码值是:32
说明看到的空格不是真正的空格。
于是自定义一个去空格的方法。
/** * @Description: 自定义去空格 excel专用 poi导入的字符串空格ASCll值:160,而空格(Space)的ASCII码值是:32 * @Author: * @Date: 14:44 2019/4/1 */ public static String StringTrim(String str){ return str.replaceAll("[\\s\\u00A0]+","").trim(); }
OK 完成。
借鉴csdn!