【问题标题】:Scanner problems in JavaJava 中的扫描仪问题
【发布时间】:2014-02-16 22:52:54
【问题描述】:

我有一个方法可以将扫描仪返回到具有输入行的文本文件(我无法正确显示它,但是像 - 嗨(新行)这个 (\n) 是 (\n) 我(\n))。然后在main中,我使用扫描仪计算输入的行数,然后重置扫描仪。后来我使用扫描仪将输入的行放入一个数组中(我不想要一个 ArrayList),但是 Java 说“java.util.NoSuchElementException: No line found”...

while(scanner.hasNextLine()){
    numOfStrings++;
    scanner.nextLine();
}

scanner.reset();
String[] stringsOfInput = new String[numOfStrings];
for(int i = 0; i < numOfStrings; i++){
    String s = scanner.nextLine();   //returns "No line found" error message
    stringsOfInput[i] = s;
}

有谁知道如何解决这个问题,让它做它应该做的?

【问题讨论】:

  • reset() 没有按照您的想法执行 - 来自 JavaDoc - 重置扫描仪会丢弃其所有可能已被 @987654324 调用更改的显式状态信息@、useLocale(java.util.Locale)useRadix(int) 重置 Scanner 无法回退流。
  • 我想你以后需要另一个扫描仪来保存这些行,reset 不会从头开始文件

标签: java java.util.scanner


【解决方案1】:

执行此操作的最通用方法是将行添加到 ArrayList&lt;String&gt; 中,然后将其添加到数组中(String[] stringsOfInput = myArrayList.toArray(new String[myArrayList.size()]);

【讨论】:

  • 这当然是理想的,但 OP 说“输入到数组中(我不想要 ArrayList)”
  • 但也许List 没问题...哈!我对 OP 的评论多于您的回答。
【解决方案2】:

您可能想尝试将 for 循环的内容放在 while 中。这样你就可以在一个循环中通过文件获取字符串的数量和每个字符串。

编辑: ArrayList 示例

ArrayList<String> stringsOfInput = new ArrayList<String>();

while(scanner.hasNextLine())
{
    stringsOfInput.add(scanner.nextLine());
    numOfStrings++;
}

【讨论】:

  • 问题是,因为我使用的是数组,而不是 ArrayList,Java 不允许我这样做,因为索引 0 处没有任何内容,所以我无法插入输入行。我需要知道数组的大小,这样我才能执行 String[] s = new String[?] 然后输入输入 - 但只有 String[] s = {}; 我不能这样做。
  • 如果它需要使用一个数组,你可以像 GreySwordz 提到的那样使用 ArrayList 。 ArrayList 不像 Array 那样固定。使用示例代码编辑答案。
猜你喜欢
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多