Как заменить несколько пробелов одним пробелом в C #?

Есть трюк, который всегда работал для меня:

Если у вас есть и неожиданный отступ, и вы видите, что весь код отлично отступом, попробуйте открыть его другим редактором, и вы увидите, какая строка Код не отступы.

Это случилось со мной, когда вы использовали vim, gedit или редакторы.

Попробуйте использовать только 1 редактор для вашего кода.

404
задан uınbɐɥs 24 September 2012 в 03:19
поделиться

9 ответов

RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);     
tempo = regex.Replace(tempo, " ");
419
ответ дан Sheridan 24 September 2012 в 03:19
поделиться
myString = Regex.Replace(myString, " {2,}", " ");
15
ответ дан Jan Goyvaerts 24 September 2012 в 03:19
поделиться

Это намного более просто, чем все это:

while(str.Contains("  ")) str = str.Replace("  ", " ");
22
ответ дан Fahim Parkar 24 September 2012 в 03:19
поделиться

Я просто записал новое Join, что мне нравится, таким образом, я думал, что повторно отвечу с ним:

public static string Join<T>(this IEnumerable<T> source, string separator)
{
    return string.Join(separator, source.Select(e => e.ToString()).ToArray());
}

Одна из прохладных вещей об этом - то, что это работает с наборами, которые не являются строками путем вызова ToString () на элементах. Использование является все еще тем же:

//...

string s = "     1  2    4 5".Split (
    " ".ToCharArray(), 
    StringSplitOptions.RemoveEmptyEntries
    ).Join (" ");
3
ответ дан Jay Bazuzi 24 September 2012 в 03:19
поделиться
string xyz = "1   2   3   4   5";
xyz = string.Join( " ", xyz.Split( new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries ));
43
ответ дан tvanfosson 24 September 2012 в 03:19
поделиться

Consolodating другие ответы, на Joel, и надо надеяться улучшающийся немного, когда я иду:

можно сделать это с Regex.Replace() :

string s = Regex.Replace (
    "   1  2    4 5", 
    @"[ ]{2,}", 
    " "
    );

Или с String.Split() :

static class StringExtensions
{
    public static string Join(this IList<string> value, string separator)
    {
        return string.Join(separator, value.ToArray());
    }
}

//...

string s = "     1  2    4 5".Split (
    " ".ToCharArray(), 
    StringSplitOptions.RemoveEmptyEntries
    ).Join (" ");
4
ответ дан Jay Bazuzi 24 September 2012 в 03:19
поделиться

Мне нравится использовать:

myString = Regex.Replace(myString, @"\s+", " ");

, Так как это поймает выполнения любого вида пробела (например, вкладки, новые строки, и т.д.) и заменит их одиночным пробелом.

566
ответ дан Matt 24 September 2012 в 03:19
поделиться

Я думаю, что ответ Мэтта лучший, но я считаю, что он не совсем верный. Если вы хотите заменить новые строки, вы должны использовать:

myString = Regex.Replace(myString, @"\s+", " ", RegexOptions.Multiline);
38
ответ дан 22 November 2019 в 23:24
поделиться

Вот небольшая модификация на Nolonar исходный ответ .

Проверка, если символ не является просто пространством, но и каким-либо пробелом, использует это:

Это заменит любого несколько пробельный символ с одиночным пробелом.

public static string FilterWhiteSpaces(string input)
{
    if (input == null)
        return string.Empty;

    var stringBuilder = new StringBuilder(input.Length);
    for (int i = 0; i < input.Length; i++)
    {
        char c = input[i];
        if (i == 0 || !char.IsWhiteSpace(c) || (char.IsWhiteSpace(c) && 
            !char.IsWhiteSpace(strValue[i - 1])))
            stringBuilder.Append(c);
    }
    return stringBuilder.ToString();
}
1
ответ дан 22 November 2019 в 23:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: