Есть трюк, который всегда работал для меня:
Если у вас есть и неожиданный отступ, и вы видите, что весь код отлично отступом, попробуйте открыть его другим редактором, и вы увидите, какая строка Код не отступы.
Это случилось со мной, когда вы использовали vim, gedit или редакторы.
Попробуйте использовать только 1 редактор для вашего кода.
RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);
tempo = regex.Replace(tempo, " ");
myString = Regex.Replace(myString, " {2,}", " ");
Это намного более просто, чем все это:
while(str.Contains(" ")) str = str.Replace(" ", " ");
Я просто записал новое 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 (" ");
string xyz = "1 2 3 4 5";
xyz = string.Join( " ", xyz.Split( new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries ));
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 (" ");
Мне нравится использовать:
myString = Regex.Replace(myString, @"\s+", " ");
, Так как это поймает выполнения любого вида пробела (например, вкладки, новые строки, и т.д.) и заменит их одиночным пробелом.
Я думаю, что ответ Мэтта лучший, но я считаю, что он не совсем верный. Если вы хотите заменить новые строки, вы должны использовать:
myString = Regex.Replace(myString, @"\s+", " ", RegexOptions.Multiline);
Вот небольшая модификация на 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();
}