【问题标题】:how to strictly find substring of string in java?如何在java中严格查找字符串的子字符串?
【发布时间】:2012-01-05 10:08:54
【问题描述】:

我想在 JAVA 中查找特定的字符串,为此我使用了 CONTAINS 函数。

但是 CONTAINS 的问题是即使有一个超级字符串可用于该字符串,它也会给出 true。

比方说

String i = "anand > 5 or id < 6" 

我想检查字符串是否包含 AND 或 OR。但是这里i.contains("and")会因为anand而给出true。

如何解决这个问题?

库中有没有可用的函数?

【问题讨论】:

  • 公共类 java.lang.String 扩展 java.lang.Object { public int substr(String str) { } }
  • 只是好奇,你想解决什么问题?

标签: java string substring


【解决方案1】:
if (i.matches("(?s).*\\b(and|or)\\b.*")) System.println("AND or OR found");

(?s) 让。也匹配换行符 \\b 是单词边界


回答评论“嘿,现在我想要...”

String[] words = ...;
StringBuilder expr = new StringBuilder();
for (String word : words) {
    if (expr.length() != 0)
        expr.append("|"):
    expr.append(word);
}
i = i.replaceAll("\\b(" + expr + ")\\b", "bla");

【讨论】:

  • 你能在我的例子中详细解释一下吗...??
  • 嘿,现在我想匹配存储在数组中的字符串...如果主字符串包含该数组字符串,那么我想替换它...你能建议我吗?
【解决方案2】:

您可能想看看正则表达式并使用以下正则表达式:

"\\band\\b"

\\b 应该表示正则表达式以仅匹配整个单词。

【讨论】:

    【解决方案3】:

    您想检查您的字符串是否包含 AND 或 OR 然后检查 i.contains("and") 是错误的,您应该使用包含区分大小写的方法。检查字符串是否包含 AND 你需要写contains("AND")

    String i = "anand > 5 or id < 6";
            System.out.println(i.contains("AND"));//returns false
    
            System.out.println(i.contains("and"));//returns true
    

    因为字符串包含而不是AND它区分大小写

    【讨论】:

    • @Downvoters,请提及您拒绝投票的宝贵理由。这将帮助其他人了解他们的错误。不要隐瞒自己的原因。
    【解决方案4】:

    您似乎想检查“AND”(带空格)而不是“and”

    【讨论】:

    • 不,我要严格查找字符串是否包含AND...??但即使在 ANAND、HAND、SAND 等情况下,功能也会发挥作用......
    • strictly 是什么意思?如果您希望它如此严格,请使用equals 方法! light_303 的检查 `AND ` 的方法将起作用,并且对于像 ANAND 这样的字符串不会给出 true。
    • String test = "sand or nosand"; boolean containsAnd = test.contains(" and ");
    • 您的要求不明确:您能否发布应返回 True 的字符串和应返回 false 的字符串的示例?例如 ANDOGAMY 是一个有效的字符串吗?
    【解决方案5】:

    我会这样做: - 大写您正在搜索的刺痛(以避免或/或和/与问题) - 搜索“和”(即带有前导和尾随空格)

    【讨论】:

      【解决方案6】:

      看起来你想要正则表达式,用分词符包围你正在寻找的单词,即

      "\\bAND\\b"
      

      只有当它没有被其他字母包围时才会匹配 AND。

      【讨论】:

        【解决方案7】:

        您想要全词搜索。可以用正则表达式来完成:

        i.matches("\\band\\b")
        

        其中\b代表单词边界

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-02-04
          • 2019-10-01
          • 2011-07-13
          • 2011-01-18
          • 2012-03-06
          相关资源
          最近更新 更多