Как я заменяю диакритические знаки (немецкий язык) в.NET

Lua:

  • я понимаю причины, но серьезно. Переменные должны быть локальными по умолчанию, с global ключевое слово, не наоборот.
  • я - в целом не огромный поклонник/конечный стиль семантики. Я очень предпочитаю фигурные скобки C-стиля.
  • Динамический контроль типов. Я знаю, некоторые из Вас идут "Ха?" но я был полностью испорчен путем знания точно, какие данные будут в данной переменной. Постоянный if (type(var) == "string") then stuff() end боль.
  • Переменные не должны быть определены, прежде чем они будут использоваться. Я очень был бы явным о том, что я пытаюсь сделать, чем рискнуть порождением опечатки, что мне нравится называть "дурацкими бобами".

PHP:

  • Снова, динамический контроль типов.
  • Отсутствие закрытий. Я знаю, можно сделать $function($arg);, но это не рассчитывает.
  • Все снова и снова, переменные могут использоваться прежде чем быть определенным. У меня есть персональная политика всегда явной инициализации любой переменной к известному значению, прежде чем я буду использовать его, и я расширяю это до любых документов лучших практик, у меня есть любой вид управления.

C/C++:

  • Заголовки = боль в шее.
  • Никакая поддержка закрытий. (Я взволнован для C++ 0x, который имеет их.)
  • Статический контроль типов. "Ожидайте", Вы говорите. "Вы просто сказали, что Вам не нравится динамический контроль типов!" Да, Действительно говорил я это. Но статический контроль типов может быть болью в торце также. (Если бы дали выбор я все еще выбрал бы статический контроль типов.) Оптимально я хотел бы язык, который был со статическим контролем типов по умолчанию, но поддерживал динамический тип также. (И я также хотел бы пони, и пятьдесят миллиардов долларов, и мир.)
9
задан MPelletier 30 April 2012 в 11:08
поделиться

4 ответа

Если вам нужно использовать это для больших строк, несколько вызовов 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();
35
ответ дан 4 December 2019 в 06:03
поделиться

Просто хотите, чтобы немецкие умляуты отображали двухбуквенный (без умлаута) вариант? Ну вот; не тестировалось, но обрабатывает все немецкие умляуты.

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;
}
10
ответ дан 4 December 2019 в 06:03
поделиться

Я не могу придумать какой-либо автоматический способ сделать это, поэтому я считаю, что вам придется делать это вручную.

то есть.

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

Сколько там символов? Все гласные в верхнем и нижнем регистре, итак, 10? Не должно быть слишком много работы.

4
ответ дан 4 December 2019 в 06:03
поделиться

Как насчет использования строки. Замените:

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

(ладно, не настоящее немецкое слово, но я не мог устоять)

Вы можете связать вызовы для Replace следующим образом

someText.Replace("ö", "oe").Replace("ä", "ae").Replace("ö", "oe")...
0
ответ дан 4 December 2019 в 06:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: