txt文件的\n与java.lang.NumberFormatException: For input string:

文章讲述了在处理从txt文件读取的数据时,由于字符串末尾的不可见换行符导致Integer.parseInt抛出NumberFormatException的问题。解决方案是使用trim()方法去除字符串两端的空格和换行符。这是对文本处理时需要注意的一个细节。
摘要由CSDN通过智能技术生成

做了一个测试,用“~”将字符串截成字段,存入数据库,部分代码如下:

public static void saveProdInfo(String rowInfo) {
        ProdInfo Info = new ProdInfo();
        String[] fields = rowInfo.split("~");
        // 设置数据
        Info.setProdId(Integer.parseInt(fields[0]));
        ...
        Info.setStockStatus(Integer.parseInt(fields[15]));
        Info.save();
}

其中的参数String rowInfo在方法调用时传入的值是从如下text.txt文件中“吸”过来的。
在这里插入图片描述
运行后出现错误提示如下:

java.lang.NumberFormatException: For input string: "1
    "
    ...
    at com.example.test.util.MallDbUtil.saveProdInfo(MallDbUtil.java:121)
    ...

意思是说,数字格式异常,原因是输入的字符串"1"。可明明被截取的字符串"1"已经被已被处理成了整型1:1 = Integer.parseInt(fields[15]),反复修改、测试,仍然解决不了问题。
将错误提示“NumberFormatException: For input string”放入百度搜索,发现有位大神说加上trim()即可,也就是要"剪掉"字符串两边的空格。可我的字符串中哪来的空格呀?死马当活马医,试试再说:

...
Info1.setStockStatus(Integer.parseInt(fields[15].trim()));
...

运行,过!为什么,为什么?要查明原因,不能糊里糊涂地过,以免以后再掉到类似的坑里。

测试过程中,不经意间发现如果将text.txt文件内容全选,直接放入程序,末尾却多了“\n”,即换行符,如下:

public static void saveProdInfo(String rowInfo) {
        ProdInfo Info = new ProdInfo();
        String s = "0~0~透绿春~c~1~1~0.1~30~0.618~50~48~50~5~5~~1\n";
        String[] fields = s.split("~");
        // 设置数据
        Info.setProdId(Integer.parseInt(fields[0]));
        ...
        Info.setStockStatus(Integer.parseInt(fields[15].trim()));
        Info.save();
}

复制的时候明明看着没有\n,怎么一粘过来就“自动加上了呢”?原来,由于各种原因,txt文件末尾会有一个甚至几个换行符,肉眼看不见,但又确实是“字符”,怪不得错误提示中包裹1的下引号被放在了下一行:

For input string: "1
    "

Integer.parseInt(参数)能处理的对象不包括空格、\n等,只处理Integer.parseInt(“1”),处理不了Integer.parseInt(“1/n”),就报错,还真是
NumberFormatException(数字格式错误)呀!

总结
1、txt文件末尾可能有一个(或几个)换行符,但肉眼看不见。进行字符操作时一定要考虑这一点。
2、字符串修剪函数string.trim()修剪string左右两边的空格、换行符(\n)等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值