rusqhyazeubebgcahrcsdanlenetfifrglkadeelhuisgaitkkkylvltmknoplptrosrskslessvtrukuz

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

Больше
7 мес. 1 день назад #270 от О.Коровяков
Пример:
1 2  3   4       5
:
 
1 2 3 4 5

Решение:
RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);     
tempo = regex.Replace(tempo, " ");

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 мес. 1 день назад #271 от О.Коровяков
Мне нравится использовать:
myString = Regex.Replace(myString, @"\s+", " ");
Так как он будет улавливать прогоны любого вида пробелов (например, вкладки, новые строки и т.д.) и заменять их одним пробелом.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 мес. 1 день назад #272 от О.Коровяков
Другой подход, который использует LINQ:
var list = str.Split(' ').Where(s => !string.IsNullOrWhiteSpace(s));
 str = string.Join(" ", list);

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 мес. 1 день назад #273 от О.Коровяков
Regex может быть довольно медленным даже при простых задачах. Это создает метод расширения, который можно использовать с любого string.
public static class StringExtension
    {
        public static String ReduceWhitespace(this String value)
        {
            var newString = new StringBuilder();
            bool previousIsWhitespace = false;
            for (int i = 0; i < value.Length; i++)
            {
                if (Char.IsWhiteSpace(value[i]))
                {
                    if (previousIsWhitespace)
                    {
                        continue;
                    }
 
                    previousIsWhitespace = true;
                }
                else
                {
                    previousIsWhitespace = false;
                }
 
                newString.Append(value[i]);
            }
 
            return newString.ToString();
        }
    }
Он будет использоваться как таковой:
string testValue = "This contains     too          much  whitespace."
testValue = testValue.ReduceWhitespace();
// testValue = "This contains too much whitespace."

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 мес. 1 день назад #274 от О.Коровяков
Для тех, кому не нравится Regex, вот метод, который использует StringBuilder:
public static string FilterWhiteSpaces(string input)
    {
        if (input == null)
            return string.Empty;
 
        StringBuilder stringBuilder = new StringBuilder(input.Length);
        for (int i = 0; i < input.Length; i++)
        {
            char c = input[i];
            if (i == 0 || c != ' ' || (c == ' ' && input[i - 1] != ' '))
                stringBuilder.Append(c);
        }
        return stringBuilder.ToString();
    }
В моих тестах этот метод в среднем был в 16 раз быстрее с очень большим набором строк малого и среднего размера по сравнению со статическим скомпилированным Regex. По сравнению с некомпилированным или нестатическим Regex, это должно быть еще быстрее.

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
7 мес. 1 день назад #275 от О.Коровяков
попробуйте этот метод
private string removeNestedWhitespaces(char[] st)
{
    StringBuilder sb = new StringBuilder();
    int indx = 0, length = st.Length;
    while (indx < length)
    {
        sb.Append(st[indx]);
        indx++;
        while (indx < length && st[indx] == ' ')
            indx++;
    }
    return sb.ToString();
}
используйте его следующим образом:
string test = removeNestedWhitespaces("1 2 3  4    5".toCharArray());

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Подпишитесь на наши новости...

Если вам интересны материалы опубликованных на Нашем сайте, Вы можете подписаться на рассылку информационных бюллетеней о новых публикациях ... Просто введите адрес электронной почты на какую Вы хотите получать Новости и нажмите кнопку "Подписаться"

Контакт Инфо

Ok-Wood.
08304 ул.Салютная,c.Гнедын,
Киевская обл, Украина
  • Тел: +39 067 492 41 24
    Tel: +38 095 095 88 60
  • Email: info@ok-wood.com.ua
  • Web: ok-wood.com.ua

Весь процесс строительства описан на страницах сайта, но более подробно о технологии, методах строительства, и всех деталях - Вы можете узнать в книге.