C#编程,如果从一个字符串中拿到不重复的字母 比如说一个字符串里面是“ssyyaillxx”如何将“AI”从这个字符串中提取出来?小弟新手望指教,希望能有CODE 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 string s = "ssyyaillxx"; int i = s.IndexOf("ai"); s = s.Substring(i, 2); var str = "ssyyaillxx";var filter = str.ToCharArray().GroupBy(s => s).Where(g => g.Count() == 1).Select(g => g.Key);var result = string.Join("", filter.ToArray());Console.WriteLine(result);Console.Read(); string test_str = "ssyyaillxx"; test_str=string.Join("",test_str.ToCharArray().GroupBy(a => a).Where(a => a.Count() == 1).Select(a=>a.Key).ToArray());//ai 利用Linq按每个字符分组,然后筛选出数量为1的(即出现一次的),然后在转成字符串 string str = @"dgsagsdretdddtetwq";char[] chars = str.ToList<char>().Distinct().ToArray<char>();str = new string(chars);我觉得吧 我这个比较简洁 我也还停留在这个,linq还没用过的说 这个比较复杂,可以参考KMP算法。 linq代码实现确实要优雅很多 不过你没接触过我这边写了段比较傻的代码 不知道你能不能看懂 主要就是循环然后查看当前字符和前后字符是否相等static void Main(string[] args) { var testString = "aaabbbcdefffkffff"; var charArray = testString.ToCharArray(); var length = charArray.Length; StringBuilder sb = new StringBuilder(); List<string> returnValue = new List<string>(); for (int i = 1; i < length; i++) { var current = charArray[i]; if (i < length-1) { if (current == charArray[i + 1] || current == charArray[i - 1]) { if (sb.Length != 0) { returnValue.Add(sb.ToString()); sb.Clear(); } continue; } else { sb.Append(current); } } else { if (current == charArray[i - 1]) { continue;//检测最后一个字符是否有重复 } else { sb.Append(current); } } } if (sb.Length != 0) { returnValue.Add(sb.ToString()); } foreach (var temp in returnValue) { Console.WriteLine(temp); } Console.ReadLine(); } string testString = "aaabbbcdefffkffff"; List<char> result = new List<char>(); List<char> deleteitems = new List<char>(); foreach (var item in testString) { if (result.Contains(item)) { result.Remove(item); deleteitems.Add(item); } else if(!deleteitems.Contains(item)) { result.Add(item); } } return result; string s = "ssyyaillxx";s = Regex.Replace(string.Join(string.Empty, s.OrderBy(c => c).ToArray()), @"(.)\1+", string.Empty);Console.WriteLine(s); 这个方法最后返回只是去掉重复的了吧,比如我这个字符串“ssyyaillxx”输出后结果就是“syailx” 多线程的运行效率问题 高分,请将该php代码翻译成c#,谢谢 读取xml 对比md5问题 C#——Console.Read()与Console.ReadLine()的区别? c#文件操作问题? 有关select where的问题 Analysis Services 项目 *.rdl 报表怎么重外部传SQL语句进去 动态改变target的值 关于单元测试 散分 .... ACCESS数据库插入数据时的错误 导出excel代码,为何导出成功后,excel进程总是存在一个呢?
string s = "ssyyaillxx";
int i = s.IndexOf("ai");
s = s.Substring(i, 2);
var filter = str.ToCharArray().GroupBy(s => s).Where(g => g.Count() == 1).Select(g => g.Key);
var result = string.Join("", filter.ToArray());
Console.WriteLine(result);
Console.Read();
test_str=string.Join("",test_str.ToCharArray().GroupBy(a => a).Where(a => a.Count() == 1).Select(a=>a.Key).ToArray());//ai
string str = @"dgsagsdretdddtetwq";
char[] chars = str.ToList<char>().Distinct().ToArray<char>();
str = new string(chars);我觉得吧 我这个比较简洁
{
var testString = "aaabbbcdefffkffff";
var charArray = testString.ToCharArray();
var length = charArray.Length;
StringBuilder sb = new StringBuilder();
List<string> returnValue = new List<string>();
for (int i = 1; i < length; i++)
{
var current = charArray[i];
if (i < length-1)
{
if (current == charArray[i + 1] || current == charArray[i - 1])
{
if (sb.Length != 0)
{
returnValue.Add(sb.ToString());
sb.Clear();
}
continue;
}
else
{
sb.Append(current);
}
}
else
{
if (current == charArray[i - 1])
{
continue;//检测最后一个字符是否有重复
}
else
{
sb.Append(current);
}
}
}
if (sb.Length != 0)
{
returnValue.Add(sb.ToString());
}
foreach (var temp in returnValue)
{
Console.WriteLine(temp);
}
Console.ReadLine();
}
List<char> result = new List<char>();
List<char> deleteitems = new List<char>();
foreach (var item in testString)
{
if (result.Contains(item))
{
result.Remove(item);
deleteitems.Add(item);
}
else if(!deleteitems.Contains(item))
{
result.Add(item);
}
}
return result;
string s = "ssyyaillxx";
s = Regex.Replace(string.Join(string.Empty, s.OrderBy(c => c).ToArray()), @"(.)\1+", string.Empty);
Console.WriteLine(s);