java split string from file,java.util.NoSuchElementException错误

时间:2015-09-10 06:36:07

标签: java

我有一个名为lol.txt的文件,其中包含以下文字:

10000002$11-beta-hydroxylase deficiency$$10010331$$$$$$$$
10000005$17 ketosteroids urine$$10022891$$$$$$$$
10000007$17 ketosteroids urine decreased$$10022891$$$$$$$$
10000009$17 ketosteroids urine increased$$10022891$$$$$$$$
10000011$17 ketosteroids urine normal$$10022891$$$$$$$$
10000013$17,20-desmolase deficiency$$10010331$$$$$$$$

我正在编写一个将提取文件内容的j​​ava程序。预期产出如下:

beta-hydroxylase deficiency
ketosteroids urine
ketosteroids urine decreased
.
.

我的代码:

public class TextSplitter {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner read = new Scanner (new File("lol.txt"));
        read.useDelimiter("$");
        String var1, var2, var3, var4, var5, var6, var7, var8, var9, var10, var11;
        while (read.hasNext())
        {
            var1 = read.next();
            var2 = read.next();
            var3 = read.next();
            var4 = read.next();
            var5 = read.next();
            var6 = read.next();
            var7 = read.next();
            var8 = read.next();
            var9 = read.next();
            var10 = read.next();
            var11 = read.next();
            System.out.println("" + var2);
        }
        read.close();
    }
}

错误是:

Exception in thread "main" java.util.NoSuchElementException

2 个答案:

答案 0 :(得分:2)

该方法接受正则表达式,而不是字符串。 $在正则表达式中有特殊含义,你应引用它来将其视为 String “$”,你有两个选择:

  • 使用\转义特殊字符(在Java \中表示为\\):

    read.useDelimiter("\\$");

  • 使用Pattern#quote为您执行此操作:

    read.useDelimiter(Pattern.quote("$"));

我强烈建议您阅读有关循环和Java的内容,它会让您的生活更轻松。浏览basic tutorial以获取更多解释。

答案 1 :(得分:0)

我建议逐行读取输入,然后解析行(例如,使用String.split)。同时将结果存储到ArrayList,而不是单个变量:

List<String> results = new ArrayList<>();
while(read.hasNext()) {
    results.add(read.nextLine().split("\\$", 3)[1]);
}
System.out.println(results);

在这里,我们将每个输入行分成由'$'分隔的片段,然后取出片段#1(编号从零开始)。

如果您不想存储结果,只需将它们打印到标准输出,请使用

while(read.hasNext()) {
    System.out.println(read.nextLine().split("\\$", 3)[1]);
}