2013-05-01 118 views
3

下面的代码来自一个试图从提交的html表单读取数据的Servlet。变量fieldValue是一个字符串,并输出正确的值(如BizStr: 5),但当我尝试将此值解析为整数时,它不会打印任何内容。Integer.parseInt不解析字符串为int

for(FileItem uploadItem : uploadItems){ 
    if(uploadItem.isFormField()){ 
    String fieldName = uploadItem.getFieldName(); 
    String fieldValue = uploadItem.getString(); 
    if(fieldName.equals("business_id")){ 
     out.println("BizStr: "+ fieldValue +"\n"); 
     out.println("BizInt: "+ Integer.parseInt(fieldValue)+"\n"); 
    } 
    } 
} 

为什么这个字符串不被解析为整数?

+0

你有没有从错误堆栈跟踪? – Kyle 2013-05-01 23:10:00

+5

我怀疑这里还有什么额外的空间,'Integer.parseInt'抛出一个'NumberFormatException',它会在某处被吃掉 – iluxa 2013-05-01 23:10:18

+1

你可以请'out.println(“BizInt:”+ Arrays.toString(fieldValue.toCharArray ())+“\ n”);'并编辑你的答案 – durron597 2013-05-01 23:10:26

回答

9

测试:

Integer.parseInt(" 5"); // space before; yields NumberFormatException 

Integer.parseInt("5 "); // space after; yields NumberFormatException 

尝试在fieldValuetrim()解析之前:

out.println("BizInt: "+ Integer.parseInt(fieldValue.trim())+"\n"); 
+0

他确实说过没有例外,但修剪也是一个很好的建议。 – 2013-05-01 23:20:38

+3

另一个要添加到评论中的对话的注释,这个答案可能比我的'replaceAll'评论更好的答案取决于如何使用数字。这将修剪尾随和前导空白,所以'5'将是可以接受的,但是'5 5'仍然会抛出一个异常提醒你一个问题。如果你不关心并且想要分析所有数字,即使中间有一个空格,'replaceAll'也会更好。 – Kyle 2013-05-01 23:21:05