【问题标题】:Check if piece of String is there in string java [duplicate]检查字符串java中是否存在一段字符串[重复]
【发布时间】:2013-07-23 00:27:12
【问题描述】:

我正在寻找一段可以在字符串中搜索字符串的代码。

String mainSTR = "It is Wednesday";

所以我需要一个在搜索时返回 true 的代码

"Day""day""DAY"mainSTR

我尝试过类似的方法

mainSTR.contains("")

mainSTR.IndexOf("") > -1

不适合我

谢谢:)

【问题讨论】:

  • 你要检查Day,那你为什么要在contains中传递空字符串?
  • 您是只查找“Day”、“day”和“DAY”,还是可以接受“dAY”和“Day”之类的内容?
  • 谢谢,但对我不起作用我尝试了我提到的那些方法
  • @loveeSindh:用contains() 显示您的实际代码,这不起作用。如果您按照所有答案中发布的方式进行操作,它将起作用。您可以使用问题下方的edit 按钮。
  • @loveeSindh 请不要再说“不工作”,而是尝试确切地解释它是如何失败的。

标签: java android string


【解决方案1】:

不能指望 Android 开发人员会提出这样的问题。无论如何,要在字符串中查找任何单词,您可以使用 Java 方法

String mainSTR = "It is Wednesday";
String findThis = "DaY";

if(mainSTR.toLowerCase().contains(findThis.toLowerCase()))
{
   System.out.println("true: Day found");
}
else
   System.out.println("false: Day not found");

【讨论】:

  • 我同意,但包含不起作用。我尝试了很多次它不起作用,这就是为什么我要求这个无论如何谢谢,但它没有帮助..
  • 你能展示这段代码片段不起作用的实际代码吗?
【解决方案2】:

如果mainSTR 是一个很长的字符串,这种方法可能更有效:

String mainSTR = "It is Wednesday";
String toSearch = "Day";
boolean found = Pattern.compile(toSearch, Pattern.CASE_INSENSITIVE).matcher(mainSTR).find();

最后一行相当于

boolean found = Pattern.compile("(?i)" + toSearch).matcher(mainSTR).find();

但请注意,如果您这样做,toSearch 可能不包含正则表达式元字符。

【讨论】:

  • 如果 mainSTR = "+91111111189"; toSearch = "89" 在这种情况下它仍然可以工作,因为我在使用此代码时遇到了错误。
  • @loveeSindh:它可以毫无问题地工作(甚至可以确定)。你遇到了什么错误??
  • 但你警告我关于 toSearch。所以即使 mainSTR 也不能包含正则表达式元字符。所以有什么办法可以忽略它?
  • @loveeSindh:不,toSearch 不能包含正则表达式元字符,mainSTR 可以。为避免这种情况,您可以使用Pattern.quote(),但它不再区分大小写。 (我编辑了我之前的评论)。
  • 好的,现在它没有出现任何类型的错误,但是如果我在 mainSTR 中有数字,就像我在第一条评论中提到的那样,它现在可以正常工作。找到的仍然是假的。
【解决方案3】:

请尝试以下操作:

mainSTR.toUpperCase().contains(day.toUpperCase());

干杯!!

【讨论】:

    【解决方案4】:

    您可以在这里使用一种方法 - 规范化功能。 toLowerCase(或 toUpperCase)就是这样的助手之一。

    mainSTR.toLowerCase().contains("day");
    

    【讨论】:

      【解决方案5】:

      看看这个

         String mainStr="It is Wednesday";
         System.out.println(mainStr.toLowerCase().contains("wed".toLowerCase()));
      

      【讨论】:

        【解决方案6】:
        String days = "day";//or "Day" or "DAY"
        mainSTR.toLowerCase().contains(days.toLowerCase());
        

        Ps:对于这样的比较,你应该更喜欢 toLowerCase(Locale.ENGLISH)toUpperCase(Locale.ENGLISH) 给你locale insensitive字符串。

        here 是 javaDoc 不得不说的。

        注意:此方法对区域设置敏感,可能会产生意想不到的结果 如果用于旨在解释语言环境的字符串,则结果 独立。示例是编程语言标识符、协议 键和 HTML 标签。例如,土耳其语中的 "TITLE".toLowerCase() 语言环境返回“t?tle”,在哪里 '?'是拉丁文小写字母 DOTLESS I 特点。要获得不区分区域设置的字符串的正确结果, 使用 toLowerCase(Locale.ENGLISH)。

        【讨论】:

        • JavaDoc 说 toLowerCase() 使用默认语言环境,与 toUpperCase() 相同。你能提供你所说的话的来源吗?
        • @ay89:它说“它根据您的区域设置执行大小写转换”,这是真的。但是toUpperCase() 做同样的事情,所以没有区别。 (P.S. 我不是反对者)
        • @jlordo 也再次阅读了文档,描述中还有更多内容。
        • @ay89:是的,它在toUpperCase() 的文档中也说了同样的话。所以没有更好的,两者都是一样的。
        【解决方案7】:
        mainSTR.toUpperCase().contains("day".toUpperCase());
        

        【讨论】:

          猜你喜欢
          • 2023-03-31
          • 1970-01-01
          • 1970-01-01
          • 2015-12-05
          • 1970-01-01
          • 1970-01-01
          • 2012-05-09
          • 2014-07-29
          • 1970-01-01
          相关资源
          最近更新 更多