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