我想使用扫描仪从文件中读取输入,但是我希望扫描仪忽略其中的所有内容(* ....... *)。我该怎么做呢?我正在获取整数并将其添加到数组列表中,但是如果我想忽略的文本内有整数,它也会添加这些整数。

public ArrayList<Integer> readNumbers(Scanner sc)
    {
        // TODO Implement readNumbers
        ArrayList<Integer> list = new ArrayList<Integer>();
        while(sc.hasNext())
        {
            try
            {
               String temp = sc.next();
               list.add(Integer.parseInt(temp));
             }
            catch(Exception e)
            {

            }
        }
        return list;
    }


这是文本文件的示例行

(* 2013年阿拉巴马州人口* *)4802740

我将21和4802740添加到我的阵列列表中。
我考虑过使用
   sc.usedelimiter(“(”);
   sc.usedelimiter(“)”);
但是我似乎无法正常工作。
谢谢!

最佳答案

看来您可能正在寻找类似的东西

sc.useDelimiter("\\(\\*[^*]*\\*\\)|\\s+");


此正则表达式\\(\\*[^*]*\\*\\)表示


\\(\\*-以(*开头,
\\*\\)-以*)结尾
[^*]*-并且其中包含零个或多个非*字符。


我还添加了|\\s+以允许一个或多个空格作为分隔符(默认情况下,扫描仪使用此分隔符)。



使用try-catch作为控制流主要部分的BTW通常被认为是错误的。相反,您应该将代码更改为类似

while (sc.hasNext()) {
    if(sc.hasNextInt()) {
        list.add(sc.nextInt());
    } else {
        //consume data you are not interested in
        //so Scanner could move on to next tokens
        sc.next();
    }
}

关于java - 如何让扫描仪忽略特定模式之间的单词,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25751749/

10-13 09:11