[英]NumberFormatException while parsing an int
So I am making file reader/writer that can access a given file and save/read from it.I am having a problem while reading from the file. 所以我正在创建文件读取器/写入器,可以访问给定的文件并保存/读取它。我在从文件读取时遇到问题。 The contents are integers, string and double separated by "|"
内容是整数,字符串和双由“|”分隔 delimiters.
分隔符。 I am using StringTokenizer to separate the tokens and save them to each individual variable but when I am reading the integers I get a NumberFormatException even though the string contains only an int.
我正在使用StringTokenizer来分隔令牌并将它们保存到每个单独的变量中,但是当我读取整数时,我得到一个NumberFormatException,即使该字符串只包含一个int。
Here is the code: 这是代码:
FileReader fr = new FileReader(filename);
BufferedReader buff = new BufferedReader(fr);
String line;
while ((line = buff.readLine()) != null) {
StringTokenizer st = new StringTokenizer(line, "|");
while (st.hasMoreElements()) {
int Id = Integer.parseInt(st.nextToken());
String Name = st.nextToken();
double cordX = Double.parseDouble(st.nextToken());
double cordY = Double.parseDouble(st.nextToken());
}
}
An example line of the file : 该文件的示例行:
8502113|Aarau|47.391355|8.051251
And the error : 而错误:
java.lang.NumberFormatException: For input string: "8502113"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at storage.FileUtilities.readCitiesFromFile(FileUtilities.java:63)
at basics.Test.main(Test.java:16)
Am I missing something here? 我在这里错过了什么吗? Is StringTokenizer tampering the string in some kind of way that I don't know?
StringTokenizer是否以某种我不知道的方式篡改字符串?
EDIT: Here is the code that creates the file: 编辑:这是创建文件的代码:
FileWriter fw = new FileWriter(filename, !overwrite); // For FileWriter true = append, false = overwrite, so we flip the value.
BufferedWriter buff = new BufferedWriter(fw);
String coordConvertor;
for (int i = 0; i <= cities.size() - 1; i++) {
buff.write(Integer.toString(cities.get(i).getId()));
buff.write("|");
buff.write(cities.get(i).getName());
buff.write("|");
coordConvertor = Double.toString(cities.get(i).getCoord().getX());
buff.write(coordConvertor);
buff.write("|");
coordConvertor = Double.toString(cities.get(i).getCoord().getY());
buff.write(coordConvertor);
buff.newLine();
There are hidden unicode characters in the String your retrieved with st.nextToken() . 使用st.nextToken()检索的String中有隐藏的unicode字符 。 Use this code instead to remove them
请使用此代码删除它们
int Id = Integer.parseInt(st.nextToken().replaceAll("\\p{C}", ""));
String Name = st.nextToken().replaceAll("\\p{C}", "");
double cordX = Double.parseDouble(st.nextToken().replaceAll("\\p{C}", ""));
double cordY = Double.parseDouble(st.nextToken().replaceAll("\\p{C}", ""));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.