我想使用扫描仪从文件读取输入,但我希望扫描仪忽略内部的所有内容(* ....... *)。我该怎么做呢?我正在使用整数并将它们添加到数组列表中,但如果文本中有整数我想忽略它也会添加它们。
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年阿拉巴马州21人口*)4802740
我会将21和4802740添加到我的数组列表中。 我想过要用 sc.usedelimiter( “(”); sc.usedelimiter( “的)”); 但我似乎无法让它发挥作用。 谢谢!
答案 0 :(得分:0)
在阅读下一个int:
之前跳过“(* string *)”try
{
try {
sc.skip("\\s*\\(\\*[^*]*\\*\\)");
} catch (NoSuchElementException e) {
}
String temp = sc.next();
list.add(Integer.parseInt(temp));
} catch (Exception e) {
}
答案 1 :(得分:0)
您似乎正在寻找类似
的内容sc.useDelimiter("\\(\\*[^*]*\\*\\)|\\s+");
此正则表达式\\(\\*[^*]*\\*\\)
代表
\\(\\*
- 以(*
,\\*\\)
- 以*)
[^*]*
- 内部包含零个或多个非*
个字符。我还添加了|\\s+
以允许一个或多个空格为分隔符(默认情况下扫描程序使用此分隔符)。
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();
}
}