Java怎么查找字符串大写_在Java中,如何检查字符串是否包含子字符串(忽略大小写)?...
本問題已經(jīng)有最佳答案,請猛點(diǎn)這里訪問。
我有兩個String s,str1和str2。 如何檢查str1是否包含在str1中,忽略大小寫?
indexOf和contains都是逐個字符的,所以如果你需要更快的字符串搜索(你可以得到),那么你需要實現(xiàn)許多已發(fā)布的算法之一。
我有同樣的問題,這里是答案:) stackoverflow.com/a/86832/621951
str1.toLowerCase().contains(str2.toLowerCase())
出于某種原因,當(dāng)我打電話給"2014-03-25T17:55:00"時,我會變得虛假.contains("T")
是否有返回的函數(shù)和包含(str2)的位置?
@RadijatoR是的,它被稱為indexOf,如int pos = str1.indexOf(str2)或不區(qū)分大小寫int pos = str1.toLowerCase().indexOf(str2.toLowerCase())
似乎現(xiàn)在正在工作。不知道之前發(fā)生了什么。相同的代碼。
@frostymarvelous我有同樣的問題,java中的錯誤...我試圖將"成功"與"成功"匹配.toLowerCase(),將失敗,將其更改為"ccess"然后它起作用。很奇怪。奇怪的是,匹配"SUCCESS"和"Successful".toUpperCase()也有效
@Fonix是str1,是str2?
@frostymarvelous"成功"是str 1,所以它是"Successful".toLowerCase().contains("success");("成功"是我從服務(wù)器的json響應(yīng)中得到的變量)
@JeremyList ideone.com/weYI1e打印true。
@JeremyList它打印為true
matches()怎么樣?
String string ="Madam, I am Adam";
// Starts with
boolean ?b = string.startsWith("Mad"); ?// true
// Ends with
b = string.endsWith("dam"); ? ? ? ? ? ? // true
// Anywhere
b = string.indexOf("I am") >= 0; ? ? ? ?// true
// To ignore case, regular expressions must be used
// Starts with
b = string.matches("(?i)mad.*");
// Ends with
b = string.matches("(?i).*adam");
// Anywhere
b = string.matches("(?i).*i am.*");
您的"indexOf"示例應(yīng)使用> = 0,而不是> 0,因為如果子字符串出現(xiàn)在字符串的開頭,則0有效。 (不是在你的例子中,但在其他情況下可以。)添加了這個響應(yīng),因為人們顯然仍在搜索并找到這個答案。
如果你能夠使用org.apache.commons.lang.StringUtils,我建議使用以下內(nèi)容:
String container ="aBcDeFg";
String content ="dE";
boolean containerContainsContent = StringUtils.containsIgnoreCase(container, content);
您可以使用toLowerCase()方法:
public boolean contains( String haystack, String needle ) {
haystack = haystack == null ?"" : haystack;
needle = needle == null ?"" : needle;
// Works, but is not the best.
//return haystack.toLowerCase().indexOf( needle.toLowerCase() ) > -1
return haystack.toLowerCase().contains( needle.toLowerCase() )
}
然后用以下方法調(diào)用:
if( contains( str1, str2 ) ) {
System.out.println("Found" + str2 +" within" + str1 +"." );
}
請注意,通過創(chuàng)建自己的方法,您可以重用它。然后,當(dāng)有人指出你應(yīng)該使用contains而不是indexOf時,你只需要改變一行代碼。
記得在傳遞null對象時添加有關(guān)行為的Javadoc。
解決方案幫助:)
我也贊成RegEx解決方案。代碼會更清晰。在我知道字符串變得很大的情況下,我會毫不猶豫地使用toLowerCase(),因為字符串是不可變的并且必須被復(fù)制。此外,matches()解決方案可能會令人困惑,因為它將正則表達(dá)式作為參數(shù)(搜索"Need $ le"冷卻有問題)。
基于上面的一些例子:
public boolean containsIgnoreCase( String haystack, String needle ) {
if(needle.equals(""))
return true;
if(haystack == null || needle == null || haystack .equals(""))
return false;
Pattern p = Pattern.compile(needle,Pattern.CASE_INSENSITIVE+Pattern.LITERAL);
Matcher m = p.matcher(haystack);
return m.find();
}
example call:
String needle ="Need$le";
String haystack ="This is a haystack that might have a need$le in it.";
if( containsIgnoreCase( haystack, needle) ) {
System.out.println("Found" + needle +" within" + haystack +"." );
}
(注意:根據(jù)您的需要,您可能希望以不同的方式處理NULL和空字符串。我認(rèn)為我的方式更接近字符串的Java規(guī)范。)
速度關(guān)鍵解決方案可以包括通過字符迭代干草堆字符尋找針的第一個字符。當(dāng)?shù)谝粋€字符匹配時(不區(qū)分大小寫),開始逐個字符地迭代針,在大海撈針中查找相應(yīng)的字符,如果所有字符都匹配則返回"true"。如果遇到不匹配的字符,則通過下一個字符的haystack繼續(xù)迭代,如果達(dá)到position> haystack.length() - needle.length()則返回"false"。
我愿意:Pattern.CASE_INSENSITIVE|Pattern.LITERAL
@mikejones我怎樣才能檢查這個單詞?考慮下面的情況1)"這是一個可能需要$ le的大海撈針。"; 2)"這是一個大海撈針,可能需要少量的東西。";我只希望案例1匹配,因為在這種情況下需要$ le作為單詞出現(xiàn)。我不希望第二種情況匹配。我怎樣才能做到這一點(diǎn)?
我將使用contains方法和toUpper方法的組合,它們是String類的一部分。一個例子如下:
String string1 ="AAABBBCCC";
String string2 ="DDDEEEFFF";
String searchForThis ="AABB";
System.out.println("Search1="+string1.toUpperCase().contains(searchForThis.toUpperCase()));
System.out.println("Search2="+string2.toUpperCase().contains(searchForThis.toUpperCase()));
這將返回:
Search1=true
Search2=false
不行。轉(zhuǎn)換為大寫/小寫時,一些奇怪的國際字符會轉(zhuǎn)換為多個字符。例如:"?".toUpperCase().equals("SS")
那就好了。這就是用德語寫雙s的方式。
總結(jié)
以上是生活随笔為你收集整理的Java怎么查找字符串大写_在Java中,如何检查字符串是否包含子字符串(忽略大小写)?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql续型_mysql续集1
- 下一篇: JAVA异常处理正常的逻辑_JAVA异常