如何用C#中的一个空格替换字符串中的多个空格?
例:
1 2 3 4 5
将会:
1 2 3 4 5
#1楼
使用LINQ的另一种方法:
var list = str.Split(' ').Where(s => !string.IsNullOrWhiteSpace(s));
str = string.Join(" ", list);
#2楼
老派
string oldText = " 1 2 3 4 5 ";
string newText = oldText
.Replace(" ", " " + (char)22 )
.Replace( (char)22 + " ", "" )
.Replace( (char)22 + "", "" );
Assert.That( newText, Is.EqualTo( " 1 2 3 4 5 " ) );
#3楼
对于那些不喜欢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();
}
在我的测试中,与静态编译的Regex相比,使用大量中小型字符串时,此方法平均快16倍。 与非编译或非静态Regex相比,这应该更快。
请记住,它不会删除开头或结尾的空格,只有这样多次出现。
#4楼
RegexOptions options = RegexOptions.None;
Regex regex = new Regex("[ ]{2,}", options);
tempo = regex.Replace(tempo, " ");
#5楼
string xyz = "1 2 3 4 5";
xyz = string.Join( " ", xyz.Split( new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries ));
#6楼
根据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 (" ");
#7楼
比这简单得多:
while(str.Contains(" ")) str = str.Replace(" ", " ");
#8楼
我喜欢使用:
myString = Regex.Replace(myString, @"\s+", " ");
因为它将捕获任何类型的空格(例如,制表符,换行符等),并将其替换为单个空格。
#9楼
我刚刚写了一个我喜欢的新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 (" ");
#10楼
我知道这已经很老了,但是在尝试完成几乎同一件事时遇到了这个问题。 在RegEx Buddy中找到了此解决方案。 此模式将用单个空格替换所有双重空格,并修剪前导和尾随空格。
pattern: (?m:^ +| +$|( ){2,})
replacement: $1
由于我们正在处理空白空间,因此有点难以阅读,因此这里还是用“ _”代替了“空格”。
pattern: (?m:^_+|_+$|(_){2,}) <-- don't use this, just for illustration.
“(?m:”构造启用了“多行”选项。我通常喜欢在模式本身中包括我可以包含的所有选项,这样它就更加独立了。
#11楼
我认为Matt的答案是最好的,但我不认为这是正确的。 如果要替换换行符,则必须使用:
myString = Regex.Replace(myString, @"\s+", " ", RegexOptions.Multiline);
#12楼
您可以简单地在一站式解决方案中做到这一点!
string s = "welcome to london";
s.Replace(" ", "()").Replace(")(", "").Replace("()", " ");
如果愿意,您可以选择其他方括号(甚至其他字符)。
#13楼
这是一个较短的版本,仅在您仅执行一次时才应使用,因为它每次调用时都会创建一个Regex
类的新实例。
temp = new Regex(" {2,}").Replace(temp, " ");
如果您不太熟悉正则表达式,请执行以下简短说明:
{2,}
使正则表达式搜索其前面的字符,并查找2到无限次之间的子字符串。 .Replace(temp, " ")
用空格替换字符串temp中的所有匹配项。
如果要多次使用它,这是一个更好的选择,因为它会在编译时创建regex IL:
Regex singleSpacify = new Regex(" {2,}", RegexOptions.Compiled);
temp = singleSpacify.Replace(temp, " ");
#14楼
myString = Regex.Replace(myString, " {2,}", " ");
#15楼
即使执行简单的任务,正则表达式也可能相当慢。 这将创建可以在任何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."
#16楼
试试这个方法
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++;
if(sb.Length > 1 && sb[0] != ' ')
sb.Append(' ');
}
return sb.ToString();
}
像这样使用它:
string test = removeNestedWhitespaces("1 2 3 4 5".toCharArray());
#17楼
我可以用这个删除空格
while word.contains(" ") //double space
word = word.Replace(" "," "); //replace double space by single space.
word = word.trim(); //to remove single whitespces from start & end.
#18楼
不使用正则表达式:
while (myString.IndexOf(" ", StringComparison.CurrentCulture) != -1)
{
myString = myString.Replace(" ", " ");
}
可以在短字符串上使用,但是在带有很多空格的长字符串上效果不佳。
#19楼
没有正则表达式,没有Linq ...删除前导和尾随空格,以及将任何嵌入的多个空格分段减少到一个空格
string myString = " 0 1 2 3 4 5 ";
myString = string.Join(" ", myString.Split(new char[] { ' ' },
StringSplitOptions.RemoveEmptyEntries));
结果:“ 0 1 2 3 4 5”
#20楼
许多答案提供了正确的输出,但是对于那些寻求最佳性能的人,我确实将Nolanar的答案 (这是性能的最佳答案)提高了约10%。
public static string MergeSpaces(this string str)
{
if (str == null)
{
return null;
}
else
{
StringBuilder stringBuilder = new StringBuilder(str.Length);
int i = 0;
foreach (char c in str)
{
if (c != ' ' || i == 0 || str[i - 1] != ' ')
stringBuilder.Append(c);
i++;
}
return stringBuilder.ToString();
}
}
#21楼
使用正则表达式模式
[ ]+ #only space
var text = Regex.Replace(inputString, @"[ ]+", " ");
#22楼
StringBuilder和Enumerable.Aggregate()的混合使用,作为字符串的扩展方法:
using System;
using System.Linq;
using System.Text;
public static class StringExtension
{
public static string StripSpaces(this string s)
{
return s.Aggregate(new StringBuilder(), (acc, c) =>
{
if (c != ' ' || acc.Length > 0 && acc[acc.Length-1] != ' ')
acc.Append(c);
return acc;
}).ToString();
}
public static void Main()
{
Console.WriteLine("\"" + StringExtension.StripSpaces("1 Hello World 2 ") + "\"");
}
}
输入:
"1 Hello World 2 "
输出:
"1 Hello World 2 "
#23楼
// Mysample string
string str ="hi you are a demo";
//Split the words based on white sapce
var demo= str .Split(' ').Where(s => !string.IsNullOrWhiteSpace(s));
//Join the values back and add a single space in between
str = string.Join(" ", demo);
//output: string str ="hi you are a demo";
#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();
}
asdfgh0077
发布了0 篇原创文章 · 获赞 2 · 访问量 8719
私信
关注