【问题标题】:Using "%", "?" and "#" in java to find a substring使用 ”%”, ”?”和“#”在java中查找子字符串
【发布时间】:2013-12-15 00:08:49
【问题描述】:

我正在尝试以一种更有效的方式来查找字符串中的元素,而不是必须将句子转换为 char 数组,然后将其与其他文本进行比较,如果您可以请告诉我是否还有其他你可能知道的方法,

我需要的是

Boolean b = myString.contains(important%urgent);

这应该不同于:

Boolean b = myString.contains(urgent%important);

在前面的例子中,如果单词包含在字符串中并且它们遵循特定的顺序,我想得到一个 True 值。

下一个是?

Boolean b myString.contains(friend?); //this would look for 'friend' and 'friends' or so

还有最后一个#

Boolean b myString.equals(#/#/2013 #:#:#);//this would return true if the date is in 2013

希望我能解释一下,谢谢你的回答。

【问题讨论】:

  • 这不清楚。在前两种情况下,您期望什么输出?到目前为止,您尝试过什么?
  • 你看过regular expressions吗?
  • 对不起,英语不是我的母语,所以也许这就是我不够清楚的原因,我试图解释我目前的解决方案,我首先将搜索拆分为字符串 [],然后我将每个结果拆分为一个 char[],然后我比较每个 char 并在每次匹配时取出一个字符,直到 char[] 为空,我对每个结果都这样做。
  • 我没有找正则表达式,但我在找。

标签: java string contains


【解决方案1】:

你想要正则表达式!

检查词序:

Boolean b = myString.matches(".*important.*urgent.*");

注意,要严格“单词”(即不匹配“不重要”),添加单词边界:

Boolean b = myString.matches(".*\\bimportant\\b.*\\burgent\\b.*");

检查单词末尾的可选“s”:

Boolean b = myString.matches(".*friends?.*");

再次,要严格而不匹配“友好”,添加单词边界:

Boolean b = myString.matches(".*\\bfriends?\\b.*");

检查数字:

Boolean b = myString.matches("\\d+/\\d+/2013 \\d+:\\d+:\\d+");

【讨论】:

    【解决方案2】:

    请尝试正则表达式。

    比如最后一个:

    Pattern p3 = Pattern.compile("^\d{2}/\d{2}/2013\s\d:\d:\d$");
    Matcher m = p3.matcher(target);
    if(m.matches()) {...}
    

    【讨论】:

    • 您需要转义 Java 字符串中的反斜杠。
    • 是的,你是对的。 :) 谢谢。我希望像 ''' A raw string ''' in Java...
    猜你喜欢
    • 2012-01-25
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-31
    相关资源
    最近更新 更多