trim去除空格失败

1、背景

一个小功能需要填写数据并上传excel文件,因此点击保存后在后台对文件中的数据进行常规校验,其中就包括使用 trim 方法去除首位空格的操作。

2、问题

填完信息、上传好文件后,保存失败了,发现错误(模拟示例):

java.lang.NumberFormatException: For input string: "  123 "

仔细看可以发现多了空格所以转换失败。

查看代码,发现已经做了trim操作(以下为简单示例):

{
	// str为文件中某列的一格数据
	String str = "  123 "; // 简单模拟,这里的空格并非具体问题中的空格
	String trimmedStr = str.trim();
	Long value = Long.valueOf(trimmedStr);
	
}

百度得知,除了我们平时在通过键盘的空格键输入的空格(ASCII码为32),还有一种空格叫做不间断空格(non-breaking space),ASCII码为160,前端的   就是这种空格。遂回来debug,发现这里空格确实有点特殊,ASCII码为160。而String 类的 trim 方法貌似无法处理这种空格。
不间断空格

3、解决

当然还是得百度。。。

方法就是通过 不间断空格的unicode编码 (\u00A0) 来将这种空格进行替换,可采用以下两种方式

  • 将其替换为空字符串
  • 将其替换为普通空格

然后再进行 trim 操作

public class Test {
    public static void main(String[] args) {
    	// 模拟特殊空格
        char nbsp = 160; // unicode码为 \u00A0
        String str = "" + nbsp + nbsp + "123" + nbsp;

        // 模拟原场景
        System.out.println("------------------trim 无法去除-------------------");
        String trimmedStr = str.trim();
        System.out.println("trim方法:\n" + trimmedStr);
//        Long num = Long.valueOf(trimmedStr);
//        System.out.println("num:" + num);

        // 替换
        System.out.println("\n----------------replace 替换-------------\n");

        String trimmedStr1 = str.replace("\u00A0", " ").trim();
        Long num1 = Long.valueOf(trimmedStr1);
        System.out.println("trimmedStr1:\n" + trimmedStr1);
        System.out.println("Long_type_num:\n" + num1);

        // 正则写法
        System.out.println("\n----------------replaceAll 正则替换-------------\n");
        String trimmedStr2 = str.replaceAll("\\u00A0", "");
        Long num2 = Long.valueOf(trimmedStr2);
        System.out.println("trimmedStr2:\n" + trimmedStr2);
        System.out.println("Long_type_num:\n" + num2);

        System.out.println("\n--正则替换2--");
        String trimmedStr3 = str.replaceAll("\u00A0", "");
        Long num3 = Long.valueOf(trimmedStr3);
        System.out.println("trimmedStr3:\n" + trimmedStr3);
        System.out.println("Long_type_num:\n" + num3);
    }
}

// 输出
------------------trim 无法去除-------------------
trim方法:
  123 
**123*	// *表示上一行没法处理的空格

----------------replace 替换-------------

trimmedStr1:
123
Long_type_num:
123

----------------replaceAll 正则替换-------------

trimmedStr2:
123
Long_type_num:
123

--正则替换2--
trimmedStr3:
123
Long_type_num:
123
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值