因此,我正在制作可以访问给定文件并从中保存/读取文件的文件读取器/写入器。从文件读取时遇到问题。内容是整数,字符串和由“ |”分隔的双精度
定界符。我正在使用StringTokenizer来分隔标记并将它们保存到每个单独的变量中,但是当我读取整数时,即使字符串仅包含一个整数,我也会得到NumberFormatException。
这是代码:
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());
}
}
该文件的示例行:
8502113|Aarau|47.391355|8.051251
和错误:
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)
我在这里想念什么吗?StringTokenizer是否以某种我不知道的方式篡改字符串?
编辑:这是创建文件的代码:
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();
您使用 st.nextToken()* 检索的 字符串中 有 隐藏的unicode字符 。使用此代码删除它们 ***
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}", ""));
问题内容: JDK或Jakarta Commons(或其他任何地方)中是否存在一种至少可以解析整数数组的方法才能解析Arrays.toString的输出的方法? 问题答案: 自己动手很容易:
问题内容: 我知道这可能不是最有效的编码方式,但这是我到目前为止所掌握的方法,并且在数字变得很大之前一直有效。该代码应从文件中读取2个数字,例如“ 052”和“ 61”。然后,它应该按从大到小的顺序对第一个数字进行排序,以使该数字尽可能大,而从最小到大个数的第二个数字,则使其尽可能小。(520&16)然后打印两者的差值,在这种情况下为504。 其中两个数字是“ 382736745372378467
问题内容: 我正在用Python阅读JSON文件,其中包含许多字段和值(约8000条记录)。Env:Windows 10,Python 3.6.4;码: 这样我得到一个错误。下面是堆栈跟踪: 伴随着我,我尝试了 与此相关,我的程序运行了很长时间,然后挂起,没有任何输出。 我搜索了几乎与此相关的所有主题,但找不到解决方案。 注意:JSON数据是有效的,因为当我在Postman /任何REST客户端上
问题内容: 具有创建仅时间Date对象的函数。(为什么需要这样做是一个长话短说,在这种情况下是无关紧要的,但是我需要与XML世界中的一些东西进行比较,其中TIME(即仅时间)是一个有效的概念)。 可能至少还有其他几种方法可以在Java中创建只有时间的日期(或更确切地说,日期部分为1970-01-01的日期),但是我的问题实际上不是关于此的。 我的问题是,这段代码在生产中运行了很长时间之后,开始在第
问题内容: 运行这部分代码时出现错误。尝试了一些现有的解决方案,但都没有帮助 我总是收到这个错误 问题答案: 这意味着在完成所有代码块之前,已到达源代码的末尾。代码块以类似如下的语句开头,然后至少需要一行包含其中应包含的代码的行。 好像您在ipython控制台中逐行执行程序。这适用于单个语句,例如for循环,但不适用于代码块。请参见以下示例: 为避免此错误,您必须将整个代码块作为单个输入输入:
问题内容: 当尝试解析一个空字符串时,我得到一个。为什么它引发与解析a不同的错误?在来源中只有明确提出。 问题答案: 用于将源字符串(必须是表达式)编译为AST。 如果源字符串不是有效的表达式(如空字符串),则将引发a 。另一方面,如果源字符串是一个有效的表达式(例如,变量名称,如),将成功,但可能会失败,并显示。 因此,在使用和时都应同时捕获。