c# - net字串包含 - java contains大小寫



不區分大小寫'包含(字符串)' (16)

有沒有辦法讓以下返回true?

string title = "ASTRINGTOTEST";
title.Contains("string");

似乎沒有一個過載允許我設置區分大小寫。目前我大寫它們兩個,但這只是愚蠢(我指的是上下套管帶來的i18n問題)。

UPDATE
這個問題是古老的,從那時起我就意識到,如果你想完全研究它,我會要求一個簡單的答案來解決一個非常龐大而困難的話題。
對於大多數情況,在單語言的英語代碼庫中, this答案就足夠了。 我懷疑是因為大多數人來到這個類別這是最受歡迎的答案。
然而, This答案提出了一個固有的問題,即我們無法比較文本不區分大小寫,直到我們知道兩個文本是相同的文化並且我們知道文化是什麼。 這可能是一個不太受歡迎的答案,但我認為它更正確,這就是為什麼我這樣標記它。


Answer #1

僅限.NET Core 2.0+(截至目前)

從2.0版開始,.NET Core有一對處理這個問題的方法:

  • String.Contains(Char, StringComparison
  • String.Contains(String, StringComparison

例:

"Test".Contains("test", System.StringComparison.CurrentCultureIgnoreCase);

隨著時間的推移,他們可能會進入.NET標準,並從那裡進入基類庫的所有其他實現。


Answer #2

StringExtension類是前進的方法,我結合上面的幾個帖子給出了一個完整的代碼示例:

public static class StringExtensions
{
    /// <summary>
    /// Allows case insensitive checks
    /// </summary>
    public static bool Contains(this string source, string toCheck, StringComparison comp)
    {
        return source.IndexOf(toCheck, comp) >= 0;
    }
}

Answer #3

OrdinalIgnoreCase,CurrentCultureIgnoreCase還是InvariantCultureIgnoreCase?

由於缺少這個,這裡有一些關於何時使用哪一個的建議:

DOS

  • 使用StringComparison.OrdinalIgnoreCase進行比較,作為與文化無關的字符串匹配的安全默認值。
  • 使用StringComparison.OrdinalIgnoreCase比較可以提高速度。
  • 在向用戶顯示輸出時,請使用StringComparison.CurrentCulture-based字符串操作。
  • 切換當前使用基於不變文化的字符串操作,以便在比較時使用非語言StringComparison.OrdinalStringComparison.OrdinalIgnoreCase
    在語言上無關緊要(例如,象徵性的)。
  • 在規範化字符串以進行比較時,請使用ToUpperInvariant而不是ToLowerInvariant

注意事項

  • 對沒有顯式或隱式指定字符串比較機制的字符串操作使用重載。
  • 使用基於StringComparison.InvariantCulture的字符串
    大多數情況下的操作; 少數例外之一
    堅持語言上有意義但與文化無關的數據。

根據這些規則,您應該使用:

string title = "STRING";
if (title.IndexOf("string", 0, StringComparison.[YourDecision]) != -1)
{
    // The string exists in the original
}

而[YourDecision]取決於上述建議。

來源鏈接: http://msdn.microsoft.com/en-us/library/ms973919.aspxhttp://msdn.microsoft.com/en-us/library/ms973919.aspx


Answer #4

使用RegEx是一種直接的方法:

Regex.IsMatch(title, "string", RegexOptions.IgnoreCase);

Answer #5

像這樣:

string s="AbcdEf";
if(s.ToLower().Contains("def"))
{
    Console.WriteLine("yes");
}

Answer #6

如果你想檢查你傳遞的字符串是否在字符串中,那麼有一個簡單的方法。

string yourStringForCheck= "abc";
string stringInWhichWeCheck= "Test abc abc";

bool isContaines = stringInWhichWeCheck.ToLower().IndexOf(yourStringForCheck.ToLower()) > -1;

This boolean value will return if string contains or not

Answer #7

您可以使用String.IndexOf方法並將StringComparison.OrdinalIgnoreCase作為要使用的搜索類型傳遞:

string title = "STRING";
bool contains = title.IndexOf("string", StringComparison.OrdinalIgnoreCase) >= 0;

更好的是為字符串定義一個新的擴展方法:

public static class StringExtensions
{
    public static bool Contains(this string source, string toCheck, StringComparison comp)
    {
        return source?.IndexOf(toCheck, comp) >= 0;
    }
}

注意, 空傳播 ?. 自C#6.0(VS 2015)起可用,適用於舊版本

if (source == null) return false;
return source.IndexOf(toCheck, comp) >= 0;

用法:

string title = "STRING";
bool contains = title.Contains("string", StringComparison.OrdinalIgnoreCase);

Answer #8

您可以使用string.indexof ()函數。 這將不區分大小寫


Answer #9

您可以先將字符串向上或向下翻轉。

string title = "string":
title.ToUpper().Contains("STRING")  // returns true

哎呀,剛看到最後一點。 不區分大小寫的比較*可能*做同樣的事情,如果性能不是問題,我認為創建大寫副本並比較它們沒有問題。 我曾經發誓我曾經看過一次不區分大小寫的比較...


Answer #10

我知道這不是C#,但在框架(VB.NET)中已經存在這樣的功能

Dim str As String = "UPPERlower"
Dim b As Boolean = InStr(str, "UpperLower")

C#變種:

string myString = "Hello World";
bool contains = Microsoft.VisualBasic.Strings.InStr(myString, "world");

Answer #11

測試字符串paragraph包含字符串word (感謝@QuarterMeister)

culture.CompareInfo.IndexOf(paragraph, word, CompareOptions.IgnoreCase) >= 0

cultureCultureInfo的實例,描述了文本的編寫語言。

這種解決方案對於不區分大小寫的定義是透明的, 這種定義與語言有關 。 例如,英語使用字符Ii作為第九個字母的大寫和小寫版本,而土耳其語使用這些字符作為其29個字母長字母表的第十一和第十二個字母。 土耳其大寫版本的'i'是不熟悉的角色'İ'。

因此,字符串tinTIN 在英語中是相同的單詞,但在土耳其語中是不同的單詞。 據我所知,一個是“精神”,另一個是擬聲詞。 (土耳其人,請糾正我,如果我錯了,或建議一個更好的例子)

總而言之, 如果你知道文本是什麼語言 ,你只能回答“這兩個字符串是否相同但在不同情況下” 的問題 。 如果你不知道,你將不得不採取行動。 鑑於英語在軟件方面的霸權,你應該求助於CultureInfo.InvariantCulture ,因為它會以熟悉的方式出錯。


Answer #12

用這個:

string.Compare("string", "STRING", new System.Globalization.CultureInfo("en-US"), System.Globalization.CompareOptions.IgnoreCase);

Answer #13

這些是最簡單的解決方案。

  1. 按索引

    string title = "STRING";
    
    if (title.IndexOf("string", 0, StringComparison.CurrentCultureIgnoreCase) != -1)
    {
        // contains 
    }
    
  2. 通過改變案例

    string title = "STRING";
    
    bool contains = title.ToLower().Contains("string")
    
  3. 通過正則表達式

    Regex.IsMatch(title, "string", RegexOptions.IgnoreCase);
    

Answer #14

這很簡潔。

Regex.IsMatch(file, fileNamestr, RegexOptions.IgnoreCase)

Answer #15

這裡的技巧是尋找字符串,忽略大小寫,但要保持完全相同(使用相同的情況)。

 var s="Factory Reset";
 var txt="reset";
 int first = s.IndexOf(txt, StringComparison.InvariantCultureIgnoreCase) + txt.Length;
 var subString = s.Substring(first - txt.Length, txt.Length);

輸出是“重置”


Answer #16
if ("strcmpstring1".IndexOf(Convert.ToString("strcmpstring2"), StringComparison.CurrentCultureIgnoreCase) >= 0){return true;}else{return false;}




case-insensitive