POI导入Excel,字符串格式出现空格,trim无效

一、问题背景

  

   在用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!

posted @ 2019-04-01 15:01  雁书几封  阅读(3351)  评论(0编辑  收藏  举报