Java 在正确的字符串上引发NumberFormatException?

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

我正在尝试将一个文件解析为一个映射。我试图解析的文本(由sys out在log中显示)是

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”));
所以删除元素不应该是个问题。