我需要将字符串中的重音替换为他们的英语等价物
例如
ä = ae
ö = oe
Ö = Oe
ü = ü
我知道从字符串中剥离它们,但我不知道替换。
如果您有任何建议,请告诉我。我正在用 C# 编码
我需要将字符串中的重音替换为他们的英语等价物
例如
ä = ae
ö = oe
Ö = Oe
ü = ü
我知道从字符串中剥离它们,但我不知道替换。
如果您有任何建议,请告诉我。我正在用 C# 编码
如果您需要在较大的字符串上使用它,多次调用Replace()
会很快变得低效。您最好逐个字符地重建字符串:
var map = new Dictionary<char, string>() {
{ 'ä', "ae" },
{ 'ö', "oe" },
{ 'ü', "ue" },
{ 'Ä', "Ae" },
{ 'Ö', "Oe" },
{ 'Ü', "Ue" },
{ 'ß', "ss" }
};
var res = germanText.Aggregate(
new StringBuilder(),
(sb, c) => map.TryGetValue(c, out var r) ? sb.Append(r) : sb.Append(c)
).ToString();
是否只想将德语变音符号映射到两个字母(非变音符号)变体?干得好; 未经测试,但它处理所有德国变音符号。
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;
}
我想不出任何自动的方法来做到这一点,所以我相信你必须手动完成。
IE。
string GermanString = "äö";
GermanString = GermanString.Replace("ä", "ae");
GermanString = GermanString.Replace("ö", "oe");
有多少个字符?所有元音,大写和小写,所以,10?工作不应该太多。
如何使用 string.Replace:
string germanText = "Mötörhead";
string replaced = germanText.Replace("ö", "oe");
(好吧,不是真正的德语单词,但我无法抗拒)
您可以像这样将调用链接到 Replace
someText.Replace("ö", "oe").Replace("ä", "ae").Replace("ö", "oe")...
此类删除变音符号(é、ì、è 等)并将变音符号和德语“ß”替换为对应的“ae (ä)”、“oe (ö)”、“ue (ü)”和“ss” (ß)”。
public sealed class UmlautConverter
{
private Dictionary<char, string> converter = new Dictionary<char, string>()
{
{ 'ä', "ae" },
{ 'Ä', "AE" },
{ 'ö', "oe" },
{ 'Ö', "OE" },
{ 'ü', "ue" },
{ 'Ü', "UE" },
{ 'ß', "ss" }
};
string value = null;
public UmlautConverter(string value)
{
if (!string.IsNullOrWhiteSpace(value))
{
this.value = value;
}
}
public string RemoveDiacritics()
{
if (string.IsNullOrWhiteSpace(value))
{
return null;
}
string normalizedString = this.value.Normalize();
foreach (KeyValuePair<char, string> item in this.converter)
{
string temp = normalizedString;
normalizedString = temp.Replace(item.Key.ToString(), item.Value);
}
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < normalizedString.Length; i++)
{
normalizedString = normalizedString.Normalize(NormalizationForm.FormD);
string c = normalizedString[i].ToString();
if (CharUnicodeInfo.GetUnicodeCategory(Convert.ToChar(c)) != UnicodeCategory.NonSpacingMark)
{
stringBuilder.Append(c);
}
}
return stringBuilder.ToString();
}
public bool HasUmlaut()
{
if (string.IsNullOrWhiteSpace(value))
{
return false;
}
foreach (KeyValuePair<char, string> item in this.converter)
{
if (this.value.Contains(item.Key.ToString()))
{
return true;
}
}
return false;
}
}
用法:
Console.WriteLine(new UmlautConverter("Nürnberger Straße").RemoveDiacritics()); // Nuernberger Strasse
Console.WriteLine(new UmlautConverter("Größenwahn").RemoveDiacritics()); // Groessenwahn
Console.WriteLine(new UmlautConverter("Übermut").RemoveDiacritics()); // UEbermut
Console.WriteLine(new UmlautConverter("Università").RemoveDiacritics()); // Universita
Console.WriteLine(new UmlautConverter("Perché").RemoveDiacritics());// Perche
Console.WriteLine(new UmlautConverter("être").RemoveDiacritics()); // etre
在“Übermut”案例中存在一个小错误,将“Ü”替换为“UE”而不是“Ue”。但这很容易修复。享受:)