Bạn thậm chí có thể giải quyết việc này với một lớp lót (mặc dù một chút xấu xí):
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));
đầu tiên nó chia tách chuỗi thành một mảng trên mỗi '-'
, sau đó nó concatenates chỉ là người đầu tiên và ký tự cuối cùng của mỗi chuỗi (hay chỉ là nhân vật duy nhất nếu chỉ có một, và nó rời chuỗi rỗng nếu không có gì ở đó), và sau đó nó nối kết quả đếm được với một String. Cuối cùng, chúng tôi rút ra lá thư đầu tiên và lá thư cuối cùng, nếu chúng không nằm trong phạm vi cần thiết.
tôi biết, đó là xấu xí, tôi chỉ nói rằng nó có thể ..
Có lẽ đó là cách tốt hơn để chỉ cần sử dụng một đơn giản
new Regex(@"\w(?=-)|(?<=-)\w", RegexOptions.Compiled)
và sau đó làm việc với điều đó ..
EDIT @Kirill Polishchuk là nhanh hơn .. giải pháp của ông nên làm việc ..
EDIT 2
Sau khi câu hỏi đã được cập nhật, đây là một đoạn trích rằng nên làm như lừa:
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);
Nó không phải rất thanh lịch, nhưng nó phải làm việc (không kiểm tra mặc dù ..). nó hoạt động gần giống như một lớp lót phía trên ...
cụm từ thông dụng là câu trả lời ở đây ([AZ]) - ([AZ]) – Tom
Tôi nên sử dụng nó như thế nào trong các hàm thao tác chuỗi C# bạn có thể xây dựng thêm @Tom – Devjosh
Vì vậy, bạn muốn 'ABC-DE' để sản xuất? 'CD' và' DE'? Nó là khó hiểu – Aliostad