我想比較兩個字符串在C#中,但我無法找到一種方法來獲得我需要的結果,而無需自己構建的東西。得到兩個字符串的公共前綴
的字符串:
TestasdOne
TestasdTwo
結果:
Testasd
我試着LINQ,但它不能得到WOR ķ。 我試過Google。
在此先感謝。
我想比較兩個字符串在C#中,但我無法找到一種方法來獲得我需要的結果,而無需自己構建的東西。得到兩個字符串的公共前綴
的字符串:
TestasdOne
TestasdTwo
結果:
Testasd
我試着LINQ,但它不能得到WOR ķ。 我試過Google。
在此先感謝。
這裏是非LINQ版本,這是更有效的,清晰可讀
public static string CommonPrefix(string a, string b)
{
if (a == null)
throw new ArgumentNullException(nameof(a));
if (b == null)
throw new ArgumentNullException(nameof(b));
var min = Math.Min(a.Length, b.Length);
var sb = new StringBuilder(min);
for (int i = 0; i < min && a[i] == b[i]; i++)
sb.Append(a[i]);
return sb.ToString();
}
使用它像
Console.WriteLine(CommonPrefix("TestasdOne", "TestasdTwo")); //Testasd
包含字符串數組版本的任何可能性? – windowskm
我會去計算前綴和單個子字符串操作的長度。看到答案: –
使用linq你可以做到這一點。而它的字符是等於在相同的索引第二列的文字
string str1 = "TestasdOne";
string str2 = "TestasdTwo";
string similar = string.Join("", str1.TakeWhile((ch, i) => i < str2.Length && str2[i] == ch));
這將需要第一個字符串的字符。
謝謝:)我第一次使用TakeWhile很有用。 –
的溶液可能是一個擴展方法添加到LINQ,將工作對於字符串,以及任何IEnumerable<T>
這是一種小型函數,當你感覺他們錯過Linq時,它們會很快寫入。
public static class CommonPartExtension
{
public static IEnumerable<T> CommonPart<T>(this IEnumerable<T> source1,
IEnumerable<T> source2)
{
IEnumerator<T> enumerator1 = source1.GetEnumerator();
IEnumerator<T> enumerator2 = source2.GetEnumerator();
while(enumerator1.MoveNext() && enumerator2.MoveNext())
{
if (enumerator1.Current.Equals(enumerator2.Current))
yield return enumerator2.Current;
else
yield break ;
}
}
}
用法:
string s1 = "TestasdOne";
string s2 = "TestasdTwo";
Console.WriteLine("CommonPart " +
new String(s1.CommonPart(s2).ToArray()));
問候
這裏是字符串的任意陣列,並與一些優化的解決方案。我不會即時編寫結果,而是計算長度。
private static string GetCommonPrefix(params string[] values)
{
string result = string.Empty;
int? resultLength = null;
if (values != null)
{
if (values.Length > 1)
{
var min = values.Min(value => value.Length);
for (int charIndex = 0; charIndex < min; charIndex++)
{
for (int valueIndex = 1; valueIndex < values.Length; valueIndex++)
{
if (values[0][charIndex] != values[valueIndex][charIndex])
{
resultLength = charIndex;
break;
}
}
if (resultLength.HasValue)
{
break;
}
}
if (resultLength.HasValue &&
resultLength.Value > 0)
{
result = values[0].Substring(0, resultLength.Value);
}
}
else if (values.Length > 0)
{
result = values[0];
}
}
return result;
}
你需要什麼結果? –
我很驚訝沒有人可以找到一個副本呢。 –