一、問題背景
在用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!
