我有一個字串串列:
List<string> list = new <string>
{
"AAB AOC 321"
"AABAOC-WEB_A"
"AABAOC-WEB_B"
}
現在我想從字串串列中提取最大的公共前綴,這將忽略空格(以及“_”等特殊字符)并給出以下結果:
"AABAOC"
我嘗試了以下方法來實作相同的目的:
var samples = new[] {
"AAB AOC 321"
"AABAOC-WEB_A"
"AABAOC-WEB_B" };
var commonPrefix = new string(samples.First().Substring(0, samples.Min(s => s.Length))
.TakeWhile((c, i) => samples.All(s => s[i] == c)).ToArray());
但是上述方法不會忽略空格和特殊字符并給出結果“AAB”,我嘗試使用 TakeWhile 功能但不知何故無法得到我想要的。
uj5u.com熱心網友回復:
您需要轉換您的字串 - 洗掉應該從它們中忽略的任何內容。
您也可以使用 Linq 來執行此操作:
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
var samples = new[] {"AAB AOC 321", "AABAOC-WEB_A", "AABAOC-WEB_B"};
var ignored = new HashSet<char>("-& _");
// use char[] internally
// use ToList() to avoid multiple enumerations
var transformed = samples
.Select(s => s.Where(c => !ignored.Contains(c)).ToArray()).ToList();
foreach (var s in transformed)
System.Console.WriteLine(s);
// just use transformed here - adjusted Substring to Take
var commonPrefix = new string (transformed.First()
.Take(transformed.Min(s => s.Length))
.TakeWhile((c, i) => transformed.All(s => s[i] == c))
.ToArray());
System.Console.WriteLine($"\nPrefix {commonPrefix}");
}
}
輸出:
AABAOC321
AABAOCWEBA
AABAOCWEBB
Prefix AABAOC
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/455717.html
上一篇:正則運算式匹配語法熒光筆的字串
