2013-04-29 19 views
6

Potrzebuję zrobić coś raczej prostego, ale bez hash mapowania twardego kodowania.Transliteracja z cyrylicy na łaciński ICU4j java

Mam ciąg s, który jest w cyrylicy. Potrzebuję jakiegoś przykładu na przekształcenie go w znaki alfabetu łacińskiego za pomocą niestandardowego filtra sortowania (w celu uzyskania czysto łacińskiego przykładu, aby nie mylić nikogo, jeśli String s = sniff, chcę, żeby spojrzał w górę i zamienił je na coś innego (mogą to być również kombinacje)

Widzę, że ICU4j może robić tego rodzaju rzeczy, ale nie mam pojęcia, jak to osiągnąć, ponieważ nie można znaleźć żadnych przykładów pracy (lub jestem po prostu głupi).

Każda pomoc jest mile widziana.

Dzięki

Pozdrowienia,

PS Potrzebuję tłumaczenia. Nie interesują mnie style i dynamiczna transliteracja - to tylko podstawowy przykład na to, jak będzie wyglądał transliterator partii ICU4j.

K Rzeczywiście mam.

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

    } 

} 

Również ostatnia edycja na transliteracji oparte reguły (jeśli nie chcesz korzystać z wcześniej istniejącą raz lub po prostu chcesz coś na zamówienie)

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

    } 

} 

Odpowiedz

4

ja napisałem metodę transliterat cyrylicy na łacinę, może to byłoby przydatne dla kogoś.

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

Bardzo przydatne w prostych aplikacjach. Dzięki! –

+1

Masz literówkę w swojej tablicy "abcCyr", zamiast "Ь" wpisałeś "Á". –

+0

dzięki, edytowane! – lxknvlk

Powiązane problemy