日期:2014-05-18  浏览次数:20428 次

去掉字符串中的相同字符,但,号不去掉,这个用正则能实现吗?正则学的不精,虚心求教~

1,2,3,2,3,4,5,1       字符串里重复的数字只会出现一次
替换成
1,2,3,4,5         1-5的顺序可以不考虑

大家帮忙想想

------解决方案--------------------
string s = "1,2,2,3,2,4,6,1,5 ";
string[] arr = s.Split(new char[] { ', ' }, StringSplitOptions.RemoveEmptyEntries);
Array.Sort <string> (arr);

for (int i = 0; i < arr.Length; i++)
{
int j = 0;
for (j = i; j < arr.Length && arr[i] == arr[j]; j++)
{
if (i != j)
{
arr[j] = string.Empty;
}
}
i = j - 1;
}
arr = Array.FindAll <string> (arr,delegate(string tmp) { return !string.IsNullOrEmpty(tmp); });

------解决方案--------------------
看楼主所给例子,数字都是一位的,那是说可能出现的数字也就0~9,最简单的就是IndexOf了,用不着循环-_-#

如果可能有两位以上的数字,用正则可以做到,但实现的机制其实也用到了循环,所以还不如直接用泛型了

正则的方法

string test = "1,23,3,23,3,4,5,1 ";
string temp = Regex.Replace(test, @ "\d+ ", new MatchEvaluator(expReplace));
string result = Regex.Replace(temp, ",+ ", ", ");
result = result.TrimEnd( ', ');

List <string> list = new List <string> ();
private string expReplace(Match m)
{
if (list.Contains(m.Value))
{
return m.Value.Replace(m.Value, " ");
}
else
{
list.Add(m.Value);
return m.Value;
}
}

非正则的方法

string str = "1,23,3,23,3,4,5,1 ";
string[] ss = str.Split( ', ');

List <string> list = new List <string> ();
foreach (string a in ss)
{
if (!list.Contains(a))
{
list.Add(a);
list.Add( ", ");
}
}

string resultStr = " ";
foreach (string s in list)
{
resultStr += s;
}
resultStr = resultStr.TrimEnd( ', ');