我通过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;
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);
}
答案 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"));
问题消失了。
公平地说,由于我有一个应用程序要写,我真的不想花几个小时重新发明轮子进行输入流操作。我只是想把一个流变成一个字符串,然后使用第一段有用的代码,或者似乎。