做了一个测试,用“~”将字符串截成字段,存入数据库,部分代码如下:
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)等。