我有一个字符串ArrayList,我想对它们执行搜索方法。 到目前为止我只有这个:
public void searchNote(String searchCertainNote)
{
for (String note: notes)
{
if (note.contains(searchCertainNote))
{
System.out.println(note);
}
}
}
我想通过允许用户搜索如下字符串来改进此搜索方法:
字符串searchCertainString =“a?c” ...可能的搜索结果:“abcd”; “A4C”; “abc”,“a22c”,“a $ c”等......
问号“?”应该代表那里的所有角色。
我做了一些谷歌搜索,发现我可以通过使用正则表达式和String.matches()实现这一点......
但我仍然需要你的帮助!
谢谢=)
答案 0 :(得分:2)
如果用户输入“?”作为通配符(或你称之为小丑),那么,如果你使用正则表达式,你需要转换'?'至 '。'在正则表达式模式中使用它。在Regex中,句点匹配任何单个字符。
因此,您需要将用户输入的“a?b”更改为“a.b”。
如果'?'意味着匹配至少一个字符,但可能多于一个,然后使用'。+'代替。 '+'是一个限定词,意思是'前面的一个或多个'。
因此,您需要将用户输入的“a?b”更改为“a。+ b”。此模式将匹配“axb”“axyb”,但不匹配“ab”。
这是Java正则表达式处理的初学者指南:
http://www.vogella.com/tutorials/JavaRegularExpressions/article.html
答案 1 :(得分:0)
这样做:
if(searchCertainNote.length <= 0) {
// String is empty, do something
return;
}
for(int i = 0; i < searchCertainNote.length; i++) {
if(searchCertainNote.charAt(i) == 'a') {
if(searchCertainNote.length >= ((i + 1) + 1))) {
if(searchCertainNote.charAt(i + 2) == 'c') {
System.out.println(searchCertainNote.charAt(i) + searchCertainNote.charAt(i + 1) + searchCertainNote.charAt(i + 2));
return;
}
} else {
// Not found, so do something
return;
}
}
}
您完全可以信任此代码。如果在您输入和返回的任何字符串中找到它,它将打印到屏幕,否则它将执行您想要的操作并返回。它还会检测空字符串和太短字符串,并避免出现ArrayIndexOutOfBoundsException。祝你好运:D。