String.Заменить регистр игнорирования - PullRequest
165 голосов
/ 08 июня 2011

У меня есть строка с именем "hello world"

Мне нужно заменить слово "world" на "csharp"

, для этого я использую:

string.Replace("World", "csharp");

но в результате я не получаю замену строки.Причина в чувствительности к регистру.Исходная строка содержит «world», тогда как я пытаюсь заменить «World».

Есть ли способ избежать этой чувствительности к регистру в методе string.Replace?

Ответы [ 15 ]

0 голосов
/ 11 апреля 2019

ниже - альтернатива для замены строки без учета регистра символов

String thisString = "hello world"; 
String replaceString = "World";

//thisString.Replace("World", "csharp"); 
//below is the alternative to replace string ignoring character case

int start = StringUtils.indexOfIgnoreCase(thisString,replaceString);
String searchKey = thisString.substring(start, start+replaceString.length());
thisString= thisString.replaceAll(searchKey ,replaceString );
System.out.println(thisString);

//prints hello World
0 голосов
/ 18 января 2019

Я предпочитаю это - "Hello World" .ToLower (). Replace ("world", "csharp");

0 голосов
/ 02 мая 2018

Использование решения @Georgy Batalov У меня возникла проблема при использовании следующего примера

string original = "бла, DC = bleh, DC = blih, DC = bloh, DC = com"; замененная строка = original.ReplaceIgnoreCase (", DC =", ".")

Ниже я переписал его расширение

public static string ReplaceIgnoreCase(this string source, string oldVale, 
string newVale)
    {
        if (source.IsNullOrEmpty() || oldVale.IsNullOrEmpty())
            return source;

        var stringBuilder = new StringBuilder();
        string result = source;

        int index = result.IndexOf(oldVale, StringComparison.InvariantCultureIgnoreCase);
        bool initialRun = true;

        while (index >= 0)
        {
            string substr = result.Substring(0, index);
            substr = substr + newVale;
            result = result.Remove(0, index);
            result = result.Remove(0, oldVale.Length);

            stringBuilder.Append(substr);

            index = result.IndexOf(oldVale, StringComparison.InvariantCultureIgnoreCase);
        }

        if (result.Length > 0)
        {
            stringBuilder.Append(result);
        }

        return stringBuilder.ToString();
    }
0 голосов
/ 19 апреля 2018

Разве это не работает: я не могу представить, чтобы что-то еще было намного быстрее или проще.

public static class ExtensionMethodsString
{
    public static string Replace(this String thisString, string oldValue, string newValue, StringComparison stringComparison)
    {
        string working = thisString;
        int index = working.IndexOf(oldValue, stringComparison);
        while (index != -1)
        {
            working = working.Remove(index, oldValue.Length);
            working = working.Insert(index, newValue);
            index = index + newValue.Length;
            index = working.IndexOf(oldValue, index, stringComparison);
        }
        return working;
    }
}
0 голосов
/ 16 апреля 2017

Ниже функция удаляет все совпадающие слова типа (this) из набора строк. Равикант Сонаре.

private static void myfun()
{
    string mystring = "thiTHISThiss This THIS THis tThishiThiss. Box";
    var regex = new Regex("this", RegexOptions.IgnoreCase);
    mystring = regex.Replace(mystring, "");
    string[] str = mystring.Split(' ');
    for (int i = 0; i < str.Length; i++)
    {
        if (regex.IsMatch(str[i].ToString()))
        {
            mystring = mystring.Replace(str[i].ToString(), string.Empty);

        }
    }
    Console.WriteLine(mystring);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...