【发布时间】:2022-01-20 09:21:38
【问题描述】:
我有一个带有多行文本(代表数字)的扫描仪,我想将扫描仪中的所有文本转换为列表。 示例:
Scanner myScanner = new Scanner(new File("input.txt"));
输入.txt:
000110100110
010101110111
111100101011
101101001101
011011111110
011100011001
110010011100
000001011100
101110100110
010001011100
011111001010
100111100101
111111000010
我的第一个想法是通过将分隔符更改为我知道文件中没有的内容来将其转换为字符串:
myScanner.useDelimiter("impossible String");
String content = myScanner.next();
然后使用
List<String> fullInput = Arrays.asList(content.split("\n"));
但是,它给我稍后解析扫描仪上的数字带来了问题。我试过调试它,但我似乎无法理解这个问题。例如,我让它在解析之前将字符串打印到控制台。它会打印一个正确的数字(asString),然后在它应该解析时给我 NumberFormatException。
这是可运行的代码:
public static void main(String[] args) throws FileNotFoundException {
Scanner myScanner = new Scanner(new File("input.txt"));
myScanner.useDelimiter("impossible String");
String content = myScanner.next();
List<String> fullInput = Arrays.asList(content.split("\n"));
System.out.println(fullInput.get(1));
System.out.println(Long.parseLong(fullInput.get(1)));
}
这是我在第一个不起作用后最终使用的:
Scanner myScanner = new Scanner(new File("input.txt"));
List<String> fullInput = new ArrayList<>();
while (sc.hasNextLine())
fullInput.add(myScanner.nextLine());
你知道第一种方法有什么问题吗?或者有更好的方法吗?
【问题讨论】:
-
由于您没有显示字符串,也没有显示它们必须如何拆分,因此这个问题可能仍然难以回答。请始终从我们的角度看待您的问题和问题,这些人只知道您展示和告诉我们的内容。
-
最终结果是 fullInput 将是扫描仪读取的所有行的列表?在这种情况下,将 sc.hasNext() 更改为 sc.hasNextLine() 并将 sc.next() 更改为 sc.nextLine()。
-
如果您的目标是简单地将文件的所有行读取为
String[],请使用Files.readAllLines。然后,您可以使用Arrays.asList将其包装为List。 -
当您尝试将行解析为数字时,我感觉真正的 问题正在发生。这可能是由于数字字符串上的前导/尾随空格之类的。尝试使用
Integer.parseInt(someString.trim()) -
@StephenC 你是对的。我添加了 .trim() 函数,它现在可以完美运行。但是,File.readAllLines() 方法似乎不存在
标签: java list java.util.scanner