2010-06-16 7 views
2

라틴 문자로 구성된 문자열을 다른 문자 집합으로 구성된 문자열로 변환하는 메서드를 구현하려면 어떻게해야합니까? 키릴 문자를 가정 해 봅시다.문자열을 문자로 변환

은 여기 예를 들어 PHP에서 어떻게하는지입니다 : 모든

function latin_to_cyrillic($string) 
{ 
$array = array(
    "а" => "a", 
    "б" => "b", 
    "в" => "v", 
    "г" => "g", 
    "д" => "d", 
    "е" => "e", 
    "ж" => "zh", 
    "з" => "z", 
    "и" => "i", 
    "й" => "y", 
    "к" => "k", 
    "л" => "l", 
    "м" => "m", 
    "н" => "n", 
    "о" => "o", 
    "п" => "p", 
    "р" => "r", 
    "с" => "s", 
    "т" => "t", 
    "у" => "u", 
    "ф" => "f", 
    "х" => "h", 
    "ц" => "ts", 
    "ч" => "ch", 
    "ш" => "sh", 
    "щ" => "sht", 
    "ь" => "y", 
    "ъ" => "a", 
    "ю" => "yu", 
    "я" => "ya", 
    "А" => "A", 
    "Б" => "B", 
    "В" => "V", 
    "Г" => "G", 
    "Д" => "D", 
    "Е" => "E", 
    "Ж" => "Zh", 
    "З" => "Z", 
    "И" => "I", 
    "Й" => "Y", 
    "К" => "K", 
    "Л" => "L", 
    "М" => "M", 
    "Н" => "N", 
    "О" => "O", 
    "П" => "P", 
    "Р" => "R", 
    "С" => "S", 
    "Т" => "T", 
    "У" => "U", 
    "Ф" => "F", 
    "Х" => "H", 
    "Ц" => "Ts", 
    "Ч" => "Ch", 
    "Ш" => "Sh", 
    "Щ" => "Sht", 
    "Ь" => "Y", 
    "Ъ" => "A", 
    "Ю" => "Yu", 
    "Я" => "Ya", 
    "–" => "-"); 

return str_replace(array_values($array), array_keys($array), $string); 

} 
+1

질문이 잘못되었습니다. "라틴 문자"및 "키릴 문자"라는 용어는 잘못 지정되어 있습니다. 많은 "라틴"및 "키릴 문자"문자 세트가 많이 있습니다. 두 개의 특정 Windows 문자 집합과 같은 특정 항목에 대해 생각하고 있다면 질문에 그렇게 말하십시오. Java에서 문자열은 그러한 문자 집합이 아닌 유니 코드를 사용하므로 형식화 된 질문은 의미가 없으므로 아마도 이러한 문자 집합과 유니 코드간에 음역이 필요할 것입니다. – reinierpost

+0

@reinierpost OP는 PHP 예제를 사용하여 'translating'에 관심이있는 라틴어와 키릴 문자를 지정합니다. –

답변

4

먼저 당신이 모든 문자에 대한 번역을 정의 변환 테이블이 필요합니다.

그런 다음 char을 통해 char을 읽고 변환 테이블을 사용하여 변환을 얻습니다. 진정해?

이 같은 것을 사용할 수 있습니다

class Translator { 
HashMap<String,String> translation = new HashMap<String,String>(); 

public Translator(){ 
    //Populate the translation table here; 
} 

public String translate(String origin){ 
    String destiny=""; 
    for(int i=0;i<origin.length();i++){ 
    char character = origin.charAt(i); 
    destiny = destiny + translation.get(Character.toString(character)); 
    } 
return destiny; 
} 
} 

는 다른 방법이 org.apache.commons.lang.StringUtils에서

replaceEach(String text, String[] searchList, String[] replacementList) 
      Replaces all occurrences of Strings within another String. 

를 사용할 수 있습니다. String[]을 라틴 문자 (예 : String)로 채운 다음 String[]에 키릴 문자를 String으로 채우고 해당 기능을 사용할 수 있습니다.

String[] latinCharacters = [] //Populate them 
String[] cyrillicCharacters = [] //Populate them 

public String translate(String origin){ 
return replaceEach(origin,latinCharacters,cyrillicCharacters); 
} 
+2

HashTable이라는 Java 클래스는 없으며 HashMap과 오래된 Hashtable 만 있습니다. 그리고 이들 중 어느 것도 원시 char로 매개 변수화 될 수 없습니다. 그걸 수정 해주세요. –

+1

냄새 테스트를 통과하지 못합니다. Hashtable은 거의 모든 상황에서 피해야하며 대신 HashMap이 사용됩니다. 제네릭에는 원시 유형을 사용할 수 없습니다. 운명은 거의 확실하게'IndexOutOfBoundsException'으로 돌아갑니다. 문제는 문자를 여러 문자로 매핑하는 것입니다. – Mike

+0

@Michael 의견에 따라 수정 됨. 나는 그것을 어떻게했는지에 대한 아이디어를 얻을 수 있도록 그것을 마음으로했습니다. – pakore

관련 문제