Java 在正确的字符串上引发NumberFormatException?
我正在尝试将一个文件解析为一个映射。我试图解析的文本(由sys out在log中显示)是Java 在正确的字符串上引发NumberFormatException?,java,parsing,integer,numberformatexception,Java,Parsing,Integer,Numberformatexception,我正在尝试将一个文件解析为一个映射。我试图解析的文本(由sys out在log中显示)是 10普济苏昂90 Metroów酒店。每个单词之间用\t 该文件是UTF-8编码的 以下是我的方法: private void readFile() { try { if (transcriptFile == null) transcriptFile = new File(transcriptPath); lines = Files.rea
10普济苏昂90 Metroów酒店
。每个单词之间用\t
该文件是UTF-8编码的
以下是我的方法:
private void readFile() {
try {
if (transcriptFile == null)
transcriptFile = new File(transcriptPath);
lines = Files.readAllLines(transcriptFile.toPath());
for (String s : lines) {
if (!s.isEmpty()) {
List<String> parts = Arrays.asList(s.split("\t"));
System.out.println(parts);
int id = Integer.parseInt(parts.get(0).trim());
parts.remove(0);
String text = String.join(" ",parts);
map.put(id,text);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
我看不出这有什么理由不可取 您的输入文件可能包含一个不可见的字符,该字符可能位于字符
10
之前。请尝试来自或Apache的解决方案
非编程方式,您可以使用Notepad++的UTF-8编码,而无需BOM
设置并保存输入文件。您的输入文件可能包含一个不可见的字符,该字符可能位于字符
10
之前。请尝试来自或Apache的解决方案
非编程方式,您可以使用Notepad++的UTF-8编码,而无需BOM
设置并保存输入文件。是否可以替换以下行
List<String> parts = Arrays.asList(s.split("\t"));
List parts=Arrays.asList(s.split(“\t”);
用这个检查一下
List<String> parts = Arrays.asList(s.replaceAll("\\s+", ",").split(","));
List parts=Arrays.asList(s.replaceAll(“\\s+”,“,”).split(“,”);
告诉我同样的异常再次出现。你能替换下一行吗
List<String> parts = Arrays.asList(s.split("\t"));
List parts=Arrays.asList(s.split(“\t”);
用这个检查一下
List<String> parts = Arrays.asList(s.replaceAll("\\s+", ",").split(","));
List parts=Arrays.asList(s.replaceAll(“\\s+”,“,”).split(“,”);
tell又出现了同样的异常。似乎这是因为字符编码问题,记事本在将编码定义为UTF-8时在文件前面保存了一些额外的字符 当我尝试此操作时,
parts.get(0.trim()
返回?10
而不是10
,因此出现了NumberFormatException
。假设您已经将10
定义为第二个单词,那么parts.get(1).trim()
将返回10
,并且不会有任何NumberFormatException
下面的问题解释这个问题
进一步的
Arrays.asList
返回一个无法修改的列表,因此部分中可能存在不支持操作异常
。删除(0)
,即使Integer.parseInt
成功 这似乎是因为字符编码问题,当将编码定义为UTF-8时,记事本在文件前面保存了一些额外的字符
当我尝试此操作时,parts.get(0.trim()
返回?10
而不是10
,因此出现了NumberFormatException
。假设您已经将10
定义为第二个单词,那么parts.get(1).trim()
将返回10
,并且不会有任何NumberFormatException
下面的问题解释这个问题
进一步的
Arrays.asList
返回一个无法修改的列表,因此部分中可能存在不支持操作异常
。删除(0)
,即使Integer.parseInt
成功 也许字符串中有一些不可见的特殊字符?如果首先去掉所有非数字,请尝试intid=Integer.parseInt(parts.get(0.replaceAll)(“\\D+”,”)
可能存在字符编码问题。字符串中可能存在某些不可见的特殊字符的重复?如果首先去掉所有非数字,请尝试intid=Integer.parseInt(parts.get(0.replaceAll)(“\\D+”,”)代码>可能存在字符编码问题。关于上一点,我将其更改为parts=new ArrayList(Arrays.asList(s.split(“\t”);
,因此删除元素不应该是问题。关于上一点,我将其更改为parts=new ArrayList(Arrays.asList(s.split(“\t”));
所以删除元素不应该是个问题。