无法将“16”解析为整数

时间:2014-01-02 22:16:21

标签: java

我通过http检索了字符串"16"。但是当我尝试将其解析为整数时:

Integer.parseInt(result);

我明白了:

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

这可能与我的编码有关吗?当然它不会显示为"16"但是不可读的东西?

编辑确定我原来省略了代码,因为它太多了。这是一个记录:

URL url = new URL(myurl);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.connect();
is = conn.getInputStream();
String contentAsString = readIt(is);
return contentAsString;

readIt() method

public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {
    Reader reader = null;
    reader = new InputStreamReader(stream, "UTF-8");        
    char[] buffer = new char[len];
    reader.read(buffer);
    return new String(buffer);
}

4 个答案:

答案 0 :(得分:4)

试试这个:

Integer.parseInt(result.trim());

最后你可能有空白角色。看看these characters

'\u001C','\u001D','\u001E','\u001F'给出完全相同的错误。

String str = "16\u001C";
System.out.println(Integer.parseInt(str.trim()));
System.out.println(Integer.parseInt(str));

答案 1 :(得分:4)

试试这个

Integer.parseInt(result.replaceAll("[^0-9]", ""));

答案 2 :(得分:2)

  

我通过http

检索了字符串“16”

不,你没有。您已检索到包含“16”和其他一些垃圾字符的字符串,例如nul。逐字节转储整个字符串,你会看到。你需要在源头修复它。

答案 3 :(得分:1)

正如不同的人所指出的那样,事实证明在16岁之后有一大堆不可打印的角色。

trim()或replace()选项都有效,但问题在于我从android开发人员培训页面复制的方法!

当我用基于

的东西替换它时
        BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));

问题消失了。

公平地说,由于我有一个应用程序要写,我真的不想花几个小时重新发明轮子进行输入流操作。我只是想把一个流变成一个字符串,然后使用第一段有用的代码,或者似乎。