Мне нужно заменить акценты в строке на их английские эквиваленты
Например
ä = ae
ö = oe
Ö = Oe
ü = ue
Я знаю, что их можно снять со шнура, но я не знал о замене.
Пожалуйста, дайте мне знать, если у вас есть предложения. Я кодирую на С#
Мне нужно заменить акценты в строке на их английские эквиваленты
Например
ä = ae
ö = oe
Ö = Oe
ü = ue
Я знаю, что их можно снять со шнура, но я не знал о замене.
Пожалуйста, дайте мне знать, если у вас есть предложения. Я кодирую на С#
Если вам нужно использовать это для больших строк, несколько вызовов 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();
res = text.Aggregate(new StringBuilder(), (sb, c) => map.TryGetValue(c, out string r) ? sb.Append(r) : sb.Append(c)).ToString();
;)
- person AntiHeadshot; 08.11.2018
Вы просто хотите сопоставить немецкие умлауты с двухбуквенным (не умлаутским) вариантом? Ну вот; непроверенный, но он обрабатывает все немецкие умлауты.
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");
(ладно, не совсем немецкое слово, но я не удержался)
Вы можете связать вызовы для замены, как это
someText.Replace("ö", "oe").Replace("ä", "ae").Replace("ö", "oe")...
Этот класс удаляет диакритические знаки (é, ì, è и т. д.) и заменяет умлауты и немецкое «ß» их эквивалентами «ae (ä)», «oe (ö)», «ue (ü)» и «ss». (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". Но это можно легко исправить. Наслаждайтесь :)