【问题标题】:Scanner - Exception in thread "main" java.util.NoSuchElementException: No line found扫描仪 - 线程“主”java.util.NoSuchElementException 中的异常:找不到行
【发布时间】:2013-06-26 10:09:18
【问题描述】:

肯定有一条线,但我不明白为什么扫描仪看不到它..

这是文件的开头:

256
<Y 1874>
<A T. HARDY‡<T Madding Crowd(Peuœ‚978)”C i”P 51‡DESCRIPTION OF FMERÅAK -- AÄINCIºNT

以下是我获取它的代码:

File file = new File ("calgary/book1_enc");
Scanner first_line = new Scanner(file);
int size_st;
size_st = Integer.valueOf(first_line.nextLine());

但我得到了错误:

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at LZWDecoder.main(LZWDecoder.java:26)

文件 book1_enc 是我的 LZW 编码算法的输出。当我将文件传递给我的解码器时,我希望解码器知道字典的大小,在这种情况下为 256...感谢阅读...

【问题讨论】:

    标签: java file-io lzw


    【解决方案1】:

    问题在于输入文件的编码。将other constructor 用于指定字符集的Scanner

    Scanner first_line = new Scanner(file, "UTF-8");
    

    使用其他构造函数会导致使用默认字符集,该字符集通常无法正确读取 unicode 字符。

    解决方法:

    BufferedReader br = new BufferedReader(new FileReader("book1_enc.dat"));
    int sizeSt = Integer.parseInt(br.readLine());
    

    【讨论】:

    • 在这里测试和工作。您可以尝试将文件保存为文本编辑器(例如 Eclipse 或 Notepad++),以便您修改编码。
    • 我打开文件记事本++,前3行就像我复制的一样,我从记事本++保存为文本文件,仍然有同样的错误,我创建了一个文本文件并将前3行粘贴到这个新的文本文件,仍然有同样的错误,另一方面,我保存的文本文件,在记事本++中看起来不像没有“\n”所有文本都粘在一起,你是怎么尝试的?你能详细说明一下吗?也许把你试过的文件发给我?
    • 复制了问题中的文件内容。除了上面的更改之外,代码与您的代码完全相同。没有它我得到NoSuchElementException
    • 我创建了一个新文件 Notepad++ 从问题中复制了我的文本,将新文件保存为 .txt 文件并添加了您的建议“UTF-8”,现在对我来说它也可以工作,但是没有办法在不使用记事本++打开然后另存为的情况下完成这项工作。你可以试试这个文件file-upload.net/download-7763286/book1_enc.html
    • 扫描仪似乎很难在 unicode 上进行匹配,您可以改用 BufferedReader
    【解决方案2】:

    这意味着您的文件没有下一行。在调用 nextLine 之前,您应该始终检查 hasNextLine()。你应该像这样修改你的代码

    if (first_line.hasNextLine()){
        size_st = Integer.valueOf(first_line.nextLine());
    }
    

    java.util.NoSuchElementException 由 Enumeration 的 nextElement 方法抛出,以指示枚举中没有更多元素。

    【讨论】:

    • 我想你的意思是hasNextLine()
    • @VaibhavRaj 我在问这个问题之前尝试了你所说的,但是当我喜欢没有一行被通过但我想得到第一行并且我知道第一行我粘贴了正如您在问题中看到的那样,我的文件的前 3 行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 2015-12-08
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多