2009-08-13 13 views
8

tôi cần phải thay thế điểm nhấn trong chuỗi tương đương tiếng Anh của họLàm thế nào để tôi thay thế dấu (Đức) trong .NET

ví dụ

ä = ae

ö = oe

Ö = Oe

ü = ue

tôi biết để gỡ bỏ chúng từ st nhưng tôi không biết gì về việc thay thế.

Vui lòng cho tôi biết nếu bạn có một số đề xuất. Tôi đang viết mã bằng C#

Trả lời

3

Tôi không thể nghĩ ra bất kỳ cách tự động nào để thực hiện việc này, vì vậy tôi tin rằng bạn sẽ phải thực hiện thủ công.

tức là.

string GermanString = "äö"; 
GermanString = GermanString.Replace("ä", "ae"); 
GermanString = GermanString.Replace("ö", "oe"); 

Có bao nhiêu ký tự? Tất cả các nguyên âm, trong chữ hoa và chữ thường, vì vậy, 10? Không nên quá nhiều công việc.

0

Làm thế nào về việc sử dụng string.Replace:

string germanText = "Mötörhead"; 
string replaced = germanText.Replace("ö", "oe"); 

(okay, không một từ thực Đức, nhưng tôi không thể cưỡng lại)

Bạn có thể gọi chuỗi để thay thế như thế này

someText.Replace("ö", "oe").Replace("ä", "ae").Replace("ö", "oe")... 
+4

Nó thực sự là M ** o ** törhead;) –

8

Bạn chỉ muốn ánh xạ các âm sắc tiếng Đức cho biến thể hai chữ cái (không phải âm sắc)? Ở đây bạn đi; chưa được kiểm tra, nhưng nó xử lý tất cả các umlauts Đức.

String replaceGermanUmlauts(String s) { 
    String t = s; 
    t = t.Replace("ä", "ae"); 
    t = t.Replace("ö", "oe"); 
    t = t.Replace("ü", "ue"); 
    t = t.Replace("Ä", "Ae"); 
    t = t.Replace("Ö", "Oe"); 
    t = t.Replace("Ü", "Ue"); 
    t = t.Replace("ß", "ss"); 
    return t; 
} 
28

Nếu bạn cần sử dụng điều này trên các chuỗi lớn hơn, nhiều cuộc gọi đến Replace() có thể không hiệu quả một cách nhanh chóng. Bạn có thể nên xây dựng lại chuỗi ký tự-by-ký tự của mình:

var map = new Dictionary<char, string>() { 
    { 'ä', "ae" }, 
    { 'ö', "oe" }, 
    { 'ü', "ue" }, 
    { 'Ä', "Ae" }, 
    { 'Ö', "Oe" }, 
    { 'Ü', "Ue" }, 
    { 'ß', "ss" } 
}; 

var res = germanText.Aggregate(
       new StringBuilder(), 
       (sb,c) => 
       { 
       string r; 
       if(map.TryGetValue(c, out r)) 
        return sb.Append(r); 
       else 
        return sb.Append(c); 
       }).ToString(); 
+3

Giải pháp tốt. Tôi đã mở rộng nó để xử lý tất cả các tiêu chuẩn ISO-8859-1: http://codepad.org/dUMpGlgg – primo