【问题标题】:String search with "?" as a joker?使用“?”进行字符串搜索作为一个小丑?
【发布时间】:2014-02-07 07:44:26
【问题描述】:

我有一个字符串数组列表,我想对它们执行搜索方法。 到目前为止我只有这个:

public void searchNote(String searchCertainNote)
{
    for (String note: notes)
    {
        if (note.contains(searchCertainNote))
        {
            System.out.println(note);
        }
    }
}

我想通过允许用户搜索如下字符串来稍微改进一下这种搜索方法:

String searchCertainString = "a?c" ... 可能的搜索结果:“abcd”; “a4c”; “Abc”、“a22c”、“a$c”等……

问号“?”应该代表所有存在的字符。

我做了一些谷歌搜索,发现我可以通过使用 regex 和 String.matches() 来实现这个......

但我仍然需要你的帮助!

谢谢 =)

【问题讨论】:

  • 是否允许用户使用其他特殊字符,如{ OR [ OR * OR $?
  • 除了 regex 和 String.matches(),你也可以自己滚动。
  • 老兄,阅读更多关于正则表达式的信息。您正在尝试重新发明轮子。

标签: java regex string search


【解决方案1】:

如果用户将输入“?”作为通配符(或你所说的小丑),那么,如果你使用正则表达式,你需要转换'?到 '。'在正则表达式模式中使用它。在 Regex 中,句点匹配任何单个字符。

因此,您需要将用户输入的“a?b”更改为“a.b”。

如果'?'意味着匹配至少一个字符,但可能不止一个,然后使用 '.+' 代替。 “+”是一个限定词,表示“前面的一个或多个”。

因此,您需要将用户输入的“a?b”更改为“a.+b”。此模式将匹配“axb”“axyb”,但不匹配“ab”。

这是一个很好的 Java 正则表达式处理初学者指南:

http://www.vogella.com/tutorials/JavaRegularExpressions/article.html

【讨论】:

  • 正则表达式的语法要复杂得多,所以你也需要转义其他字符
【解决方案2】:

这样做:

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

您可以完全信任此代码。如果在您输入并返回的任何字符串中找到它,它将打印到屏幕 a?c,否则它将执行您想要的操作并返回。它还检测空字符串和太短的字符串并避免 ArrayIndexOutOfBoundsException。祝你好运:D。

【讨论】:

  • 我认为这与问题无关
猜你喜欢
  • 2015-02-07
  • 2013-08-09
  • 1970-01-01
  • 2015-12-12
  • 1970-01-01
  • 2014-03-06
  • 2015-06-15
  • 1970-01-01
  • 2017-04-24
相关资源
最近更新 更多