你甚至可以用一行代碼解決這個問題(雖然有點醜):
String.Join(String.Empty, input.Split('-').Select(q => (q.Length == 0 ? String.Empty : (q.Length > 1 ? (q.First() + q.Last()).ToString() : q.First().ToString())))).Substring(((input[0] + input[1]).ToString().Contains('-') ? 0 : 1), input.Length - ((input[0] + input[1]).ToString().Contains('-') ? 0 : 1) - ((input[input.Length - 1] + input[input.Length - 2]).ToString().Contains('-') ? 0 : 1));
首先它將該字符串數組每個'-'
,那麼它只能如果只有一個串接第一和每個字符串的最後一個字符(或只是唯一的字符,它離開如果沒有任何內容,則爲空字符串),然後將生成的枚舉連接到一個String。最後,我們刪除第一個和最後一個字母,如果它們不在需要的範圍內。
我知道,它的醜陋,我只是說,它可能..
也許它的方式最好只使用一個簡單的
new Regex(@"\w(?=-)|(?<=-)\w", RegexOptions.Compiled)
,然後與工作..
編輯 @Kirill舒克也較快。他的解決方案應該工作..
EDIT 2
的問題已被更新後,這裏有一個片段是應該做的伎倆:
string input = "A-B-C";
string s2;
string s3 = "";
string s4 = "";
var splitted = input.Split('-');
foreach(string s in splitted) {
if (s.Length == 0)
s2 = String.Empty;
else
if (s.Length > 1)
s2 = (s.First() + s.Last()).ToString();
else
s2 = s.First().ToString();
s3 += s4 + s2;
s4 = " and ";
}
int beginning;
int end;
if (input.Length > 1)
{
if ((input[0] + input[1]).ToString().Contains('-'))
beginning = 0;
else
beginning = 1;
if ((input[input.Length - 1] + input[input.Length - 2]).ToString().Contains('-'))
end = 0;
else
end = 1;
}
else
{
if ((input[0]).ToString().Contains('-'))
beginning = 0;
else
beginning = 1;
if ((input[input.Length - 1]).ToString().Contains('-'))
end = 0;
else
end = 1;
}
string result = s3.Substring(beginning, s3.Length - beginning - end);
這不是很優雅,但它應該工作(雖然不是測試..)。它的作用幾乎與上面的單線一樣...
正則表達式是這裏的答案([AZ]) - ([AZ]) – Tom 2012-02-08 09:50:07
我應該如何利用它在C#中字符串操作函數會詳細說明更多@Tom – Devjosh 2012-02-08 09:51:53
那麼你想要什麼'ABC-DE'生產? 'CD'和'DE'?這是令人困惑的 – Aliostad 2012-02-08 09:51:57