当模式发生java时,我可以忽略列表的其余部分吗



这是代码:

private List listaPunktowInt(List lista) {

String liniaString="";
List<Integer> list=new ArrayList();
Iterator<String> it=lista.iterator();
while(it.hasNext()) {
liniaString=it.next();

if(Pattern.matches("\d*",liniaString)) {
list.add(Integer.parseInt(liniaString));
}
}

//Collections.sort(list);
//Collections.reverse(list);
System.out.println(list);
return list;
}
Input:[56, 4, 2 2022 04 06, 1, 1, 1]
Output:[56, 4, 1, 1, 1]

我想要";2〃;也包括在内,但其余部分("2022 04 06"(被忽略,这可能吗?

现在Pattern.matches检查整个字符串是否与d*匹配(即仅包含数字(。使用静态Pattern.matches方法非常容易。

要使用正则表达式做更多的事情,您应该使用Matcher(这是关于正则表达式的单个使用的事情,即它是d*等模式和liniaString等输入字符串的组合(。它仍然在幕后使用,但Pattern.matches对你隐瞒了这一事实。

因此,您的代码可能是这样的(我还修复了类型并添加了static,因为该方法不依赖于对象的任何状态(:

private static List<Integer> listaPunktowInt(List<String> lista) {
Pattern pattern = Pattern.compile("^d+");
List<Integer> list=new ArrayList<>();
for (String liniaString : lista) {
Matcher matcher = pattern.matcher(liniaString);
if(matcher.find()) {
list.add(Integer.parseInt(matcher.group()));
}
}
return list;
}

现在,这只需要从开头取尽可能多的数字,并忽略后面的任何数字(字符、空格、字符串结尾等(。如果你想要其他数字,你可以调整使用的模式。

最新更新