2013-04-29 10 views
6

Ich muss etwas ziemlich einfaches tun, aber ohne Hash-Mapping harte Codierung.Transliteration von kyrillisch nach lateinisch ICU4j Java

Ich habe eine Zeichenfolge s und es ist in Kyrillisch Ich brauche eine Art von Beispiel, wie man es in lateinische Zeichen mit einem benutzerdefinierten Filter einer Art (um ein rein lateinisches Beispiel zu geben, um jemanden nicht zu verwirren, wenn String s = Sniff; Ich will, dass es nach oben schnüffelt und sie in etwas anderes verwandelt (es könnte auch Kombinationen geben.)

Ich kann sehen, dass ICU4j so etwas tun kann, aber ich habe keine Ahnung, wie ich es erreichen kann kann keine Arbeitsbeispiele (oder ich bin einfach nur dumm) finden.

Jede Hilfe sehr geschätzt wird.

Dank

Mit freundlichen Grüßen,

PS Ich brauche eine Batch-Übersetzung. Ich interessiere mich nicht für Stile oder dynamische Transliteration, nur ein grundlegendes Beispiel dafür, wie ein ICU4j Stapel-Transliterator aussehen würde.

K Ich habe es tatsächlich bekommen.

import com.ibm.icu.text.Transliterator; 


public class BulgarianToLatin { 


    public static String BULGARIAN_TO_LATIN = "Bulgarian-Latin/BGN"; 

    public static void main(String[] args) { 
     String bgString = "Джокович"; 

     Transliterator bulgarianToLatin = Transliterator.getInstance(BULGARIAN_TO_LATIN); 
     String result1 = bulgarianToLatin.transliterate(bgString); 
     System.out.println("Bulgarian to Latin:" + result1); 

    } 

} 

Auch ein zuletzt für eine regelbasierte Umschrift (wenn Sie nicht wünschen, die bereits bestehenden einmal verwenden oder wollen einfach nur etwas nach Maß)

import com.ibm.icu.text.Transliterator; 

public class BulgarianToLatin { 


    public static String BULGARIAN_TO_LATIN = "Bulgarian-Latin/BGN"; 

    public static void main(String[] args) { 
     String bgString = "а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ю я \n Юлиян Джокович"; 

     String rules="::[А-ЪЬЮ-ъьюяѢѣѪѫ];" + 
     "Б > B;" + 
     "б > b;" + 
     "В > V;" + 
     "ТС > TS;" + 
     "Тс > Ts;" + 
     "ч > ch;" + 
     "ШТ > SHT;" + 
     "Шт > Sht;" + 
     "шт > sht;" + 
     "{Ш}[[б-джзй-нп-тф-щь][аеиоуъюяѣѫ]] > Sh;" + 
     "Я > YA;" + 
     "я > ya;"; 
     Transliterator bulgarianToLatin = Transliterator.createFromRules("temp", rules, Transliterator.FORWARD); 

     String result1 = bulgarianToLatin.transliterate(bgString); 
     System.out.println("Bulgarian to Latin:" + result1); 

    } 

} 

Antwort

4

Ich habe geschrieben, ein Verfahren Transliterate kyrillisch zu lateinisch, vielleicht wäre dies nützlich zu smb.

public static String transliterate(String message){ 
    char[] abcCyr = {' ','а','б','в','г','д','е','ё', 'ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х', 'ц','ч', 'ш','щ','ъ','ы','ь','э', 'ю','я','А','Б','В','Г','Д','Е','Ё', 'Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х', 'Ц', 'Ч','Ш', 'Щ','Ъ','Ы','Ь','Э','Ю','Я','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; 
    String[] abcLat = {" ","a","b","v","g","d","e","e","zh","z","i","y","k","l","m","n","o","p","r","s","t","u","f","h","ts","ch","sh","sch", "","i", "","e","ju","ja","A","B","V","G","D","E","E","Zh","Z","I","Y","K","L","M","N","O","P","R","S","T","U","F","H","Ts","Ch","Sh","Sch", "","I", "","E","Ju","Ja","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}; 
    StringBuilder builder = new StringBuilder(); 
    for (int i = 0; i < message.length(); i++) { 
     for (int x = 0; x < abcCyr.length; x++) { 
      if (message.charAt(i) == abcCyr[x]) { 
       builder.append(abcLat[x]); 
      } 
     } 
    } 
    return builder.toString(); 
} 
+0

Sehr nützlich für einfache Anwendungen. Vielen Dank! –

+1

Sie haben einen Tippfehler in Ihrem 'abcCyr' Array, anstatt 'Ь' haben Sie 'Б' geschrieben. –

+0

danke, bearbeitet! – lxknvlk

Verwandte Themen