gpt4 book ai didi

java - 如何让扫描仪忽略特定模式之间的单词

转载 作者:太空宇宙 更新时间:2023-11-04 14:34:32 25 4
gpt4 key购买 nike

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

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;
}

这是文本文件的示例行

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

我会将 21 和 4802740 添加到我的数组列表中。我想过使用 sc.usedelimiter("("); sc.usedelimiter(")");但我似乎无法让它发挥作用。谢谢!

最佳答案

您似乎正在寻找类似的东西

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

这个正则表达式\\(\\*[^*]*\\*\\)代表的部分

  • \\(\\* - 以 (*,
  • 开头
  • \\*\\) - 以 *) 结尾
  • [^*]* - 且内部有零个或多个非 * 字符。

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

<小时/>

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com