【发布时间】:2012-10-09 03:56:59
【问题描述】:
我有一个类似于“foo-bar----baz--biz”的字符串
消除无关紧要的重复字符(-)并使字符串“foo-bar-baz-biz”的最简单和最快的方法是什么?
我已经尝试过类似.Replace("--","-") 的操作,但这似乎只能在一定程度上起作用。我必须循环运行它才能完全做到这一点,而且我知道有更好的方法。
最好的方法是什么?
【问题讨论】:
我有一个类似于“foo-bar----baz--biz”的字符串
消除无关紧要的重复字符(-)并使字符串“foo-bar-baz-biz”的最简单和最快的方法是什么?
我已经尝试过类似.Replace("--","-") 的操作,但这似乎只能在一定程度上起作用。我必须循环运行它才能完全做到这一点,而且我知道有更好的方法。
最好的方法是什么?
【问题讨论】:
试试这个,
string finalStr = string.Join("-", x.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries))
如果将其转换为 Extension method 会更好
static class StringExtensions
{
public static string RemoveExtraHypen(this string str)
{
return string.Join("-", str.Split(new []{'-'}, StringSplitOptions.RemoveEmptyEntries));
}
}
用法
private void SampleDemo()
{
string x = "foo-bar----baz--biz";
Console.WriteLine(x.RemoveExtraHypen());
}
【讨论】:
RemoveDuplicates(this string str, char duplicate)这样的扩展方法,所以它不仅仅适用于这个:P
试试Regex类
using System.Text.RegularExpressions;
string input = "foo-bar----baz--biz";
Regex regex = new Regex("\\-+");
string output = regex.Replace(input, "-");
【讨论】:
非常简单的解决方案:)
private string RemoveDuplicates(string s, char toRemove)
{
if (s.Length <= 1) return s;
char s1,s2;
string result="";
result = s[0].ToString();
s1 = s[0];
for (int i = 0; i < s.Length-1; i++)
{
s2 = s[i + 1];
if ( s2.Equals(toRemove)&& s1.Equals(s2))
{
s1 = s[i];
continue;
}
result += s2.ToString();
s1 = s[i + 1];
}
return result;
}
string s = RemoveDuplicates("f---oo-bar----baz--biz", '-');
【讨论】: