2013-04-29 16 views
6

Ho bisogno di fare qualcosa di piuttosto semplice, ma senza hash mappatura hard coding.Traslitterazione da cirillico a latino ICU4j java

Ho una stringa s ed è in cirillico Ho bisogno di una sorta di esempio su come trasformarlo in caratteri latini usando un filtro personalizzato di un ordinamento (per dare un esempio puramente latino da non confondere nessuno se String s = sniff, voglio che annusi e li trasformi in qualcos'altro (potrebbero esserci anche combinazioni)

Posso vedere che ICU4j può fare questo genere di cose ma non ho idea di come ottenerlo come non riesce a trovare alcun esempio di lavoro (o sono solo stupido).

ogni aiuto è apprezzato.

Grazie

Cordiali saluti,

PS Ho bisogno di tradurre un lotto. Non mi piacciono gli stili o la traslitterazione dinamica, solo alcuni esempi di base su come dovrebbe essere un traslitteratore batch ICU4j.

K In realtà ho capito.

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); 

    } 

} 

anche un ultimo di modifica per una traslitterazione basato su regole (se non si desidera utilizzare il pre-esistente, una volta o semplicemente volete qualcosa su misura)

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); 

    } 

} 

risposta

4

Ho scritto un metodo per traslitterato dal cirillico al latino, forse questo sarebbe utile per 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

Molto utile per applicazioni semplici. Grazie! –

+1

Hai un refuso nella tua matrice 'abcCyr', invece di 'Ь' hai scritto 'Á'. –

+0

grazie, modificato! – lxknvlk