字符串搜索“?”作为一个小丑?

时间:2014-01-17 20:14:14

标签: java regex string search

我有一个字符串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()实现这一点......

但我仍然需要你的帮助!

谢谢=)

2 个答案:

答案 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。