Получить все экземпляры подстроки по одному? - PullRequest
1 голос
/ 04 февраля 2012

Если у меня есть строка, содержащая три 0 значения, как бы я взял их одно за другим, чтобы заменить их?

0 могут находиться в любом месте строки.

Я не хочу использовать регулярное выражение.

пример строки для разбора:

String myString = "hello 0 goodbye 0 clowns are cool 0"; 

прямо сейчас я могу найти только три значения 0, если они находятся рядом друг с другом.я заменяю их, используя stringToParse.Replace("0", "whatever value i want to replace it with");

Я хочу иметь возможность заменить каждый экземпляр 0 на другое значение ...

Ответы [ 5 ]

4 голосов
/ 04 февраля 2012

Вы можете сделать что-то вроде this :

var strings = myString.Split('0');
var replaced = new StringBuilder(strings[0]);

for (var i = 1; i < strings.Length; ++i)
{
    replaced.Append("REPLACED " + i.ToString());
    replaced.Append(strings[i]);
}
2 голосов
/ 04 февраля 2012

псевдоланг:

s = "yes 0 ok 0 and 0"
arr = s.split(" 0")
newstring = arr[0] + replace1  + arr[1] + replace2 + arr[2] + replace3
1 голос
/ 04 февраля 2012
public string ReplaceOne(string full, string match, string replace)
{
    int firstMatch = full.indexOf(match);
    if(firstMatch < 0)
    {
        return full;
    }
    string left;
    string right;
    if(firstMatch == 0)
        left = "";
    else
        left = full.substring(0,firstMatch);
    if(firstMatch + match.length >= full.length)
        right = "";
    else
        right = full.substring(firstMatch+match.length);
    return left + replace + right 
}

Если ваше совпадение может произойти в замене, вы захотите отследить, какой индекс вы используете, и передать его в indexOf.

1 голос
/ 04 февраля 2012

Использование LINQ и универсальной функции для отделения логики замены.

var replace = (index) => {
                    // put any custom logic here
                    return (char) index;
                 };

string input = "hello 0 goodbye 0 clowns are cool 0";       
string output = new string(input.Select((c, i) => c == '0' ? replace(i) : c)
                                .ToArray());

Плюсы:

  • Логика замены символов отделена от обработки строки (фактически запрос LINQ)

Минусы:

  • Не лучшее решение с точки зрения производительности
1 голос
/ 04 февраля 2012

Если у вас есть контроль над этими входными строками, я бы использовал вместо этого строку составного формата:

string myString = "hello {0} goodbye {1} clowns are cool {2}";
string replaced = string.Format(myString, "replace0", "replace1", "replace2");
...