簡體   English   中英

Java中沒有前綴和后綴的contains()方法

[英]contains() method without prefix and suffix in Java

我被困在(我認為簡單) String驗證上。 我使用以下方法從EditText獲取文本,該文本可以有 420 個字符並且必須包含一個特定的單詞(無論它在哪里):

if(edittext.getText().toString().toLowerCase().contains(stringToHave)) { }
// stringToHave = the specific String  

但是,我想改善這種情況。 例如,你有這個:

String a = "This not a MetaStackOverflow question"; 
String b = "stackoverflow";  

而你要知道,如果a含有b無論是大小寫敏感的,那么,你做如下:

if(a.toLowerCase().contains(b)) { }  

這個條件是真的,因為a確實包含StackOverflow 但是, a不完全包含b ,有一個前綴為Meta 這不是完全相同的詞。我試圖在 SO 和其他 Java 網站上找到一種方法,但沒有結果。

如何改進contains()方法以僅查找沒有前綴或后綴的確切String 我應該使用另一種方法嗎(如containsOnly() ,我已經嘗試過,但似乎未定義字符串,它是為了檢查它是否包含數字/字母/等字符)

編輯:

添加“兩個空格”驗證非常有吸引力和巧妙。 但是,如果特定文本位於句子的末尾並且我們添加了. 這行不通,不是嗎?

a = "This is great. This is on StackOverflow." // false because we have "."

在您尋求的模式之前和之后使用空間:

if(a.toLowerCase().contains(" " + b + " ")) { } 

您可以在此處使用正則表達式。 Matcher類有一個find()方法,用於在字符串中搜索模式。 這將起作用:

Matcher matcher = Pattern.compile("(?i)\\b" + Pattern.quote(b) + "\\b").matcher(a);
if (matcher.find()) {
    // contains
}

(?i)是不區分大小寫的嵌入標志。 Pattern.quote()用於轉義搜索字符串中的正則表達式元字符。

您可以使用帶有字邊界\\\\b不區分大小寫的Pattern來執行此操作:

String a = "This not a MetaStackOverflow question";
String b = "stackoverflow";
Pattern p = Pattern.compile("\\b" + b + "\\b", Pattern.CASE_INSENSITIVE);
if (p.matcher(a).find()) { }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM