检查字符串java中是不是存在一段字符串[重复]
Posted
技术标签:
【中文标题】检查字符串java中是不是存在一段字符串[重复]【英文标题】: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 请不要再说“不工作”,而是尝试确切地解释它是如何失败的。
【参考方案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()
相同。你能提供你所说的话的来源吗?
@jlordo javapapers.com/core-java/…
@ay89:它说“它根据您的区域设置执行大小写转换”,这是真的。但是toUpperCase()
做同样的事情,所以没有区别。 (P.S. 我不是反对者)
@jlordo 也再次阅读了文档,描述中还有更多内容。
@ay89:是的,它在toUpperCase()
的文档中也说了同样的话。所以没有更好的,两者都是一样的。【参考方案7】:
mainSTR.toUpperCase().contains("day".toUpperCase());
【讨论】:
以上是关于检查字符串java中是不是存在一段字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章