逐个字符翻译字符串

Ema*_*sev 5 java string

我应该如何实现一种方法,获取由拉丁字符组成的字符串,并将其转换为由不同字符集(比方说西里尔字母)组成的字符串。

\n\n

例如,以下是 PHP 中的完成方式:

\n\n
function latin_to_cyrillic($string)\n{\n $array = array(\n  "\xd0\xb0" => "a",\n  "\xd0\xb1" => "b",\n  "\xd0\xb2" => "v",\n  "\xd0\xb3" => "g",\n  "\xd0\xb4" => "d",\n  "\xd0\xb5" => "e",\n  "\xd0\xb6" => "zh",\n  "\xd0\xb7" => "z",\n  "\xd0\xb8" => "i",\n  "\xd0\xb9" => "y",\n  "\xd0\xba" => "k",\n  "\xd0\xbb" => "l",\n  "\xd0\xbc" => "m",\n  "\xd0\xbd" => "n",\n  "\xd0\xbe" => "o",\n  "\xd0\xbf" => "p",\n  "\xd1\x80" => "r",\n  "\xd1\x81" => "s",\n  "\xd1\x82" => "t",\n  "\xd1\x83" => "u",\n  "\xd1\x84" => "f",\n  "\xd1\x85" => "h",\n  "\xd1\x86" => "ts",\n  "\xd1\x87" => "ch",\n  "\xd1\x88" => "sh",\n  "\xd1\x89" => "sht",\n  "\xd1\x8c" => "y",\n  "\xd1\x8a" => "a",\n  "\xd1\x8e" => "yu",\n  "\xd1\x8f" => "ya",\n  "\xd0\x90" => "A",\n  "\xd0\x91" => "B",\n  "\xd0\x92" => "V",\n  "\xd0\x93" => "G",\n  "\xd0\x94" => "D",\n  "\xd0\x95" => "E",\n  "\xd0\x96" => "Zh",\n  "\xd0\x97" => "Z",\n  "\xd0\x98" => "I",\n  "\xd0\x99" => "Y",\n  "\xd0\x9a" => "K",\n  "\xd0\x9b" => "L",\n  "\xd0\x9c" => "M",\n  "\xd0\x9d" => "N",\n  "\xd0\x9e" => "O",\n  "\xd0\x9f" => "P",\n  "\xd0\xa0" => "R",\n  "\xd0\xa1" => "S",\n  "\xd0\xa2" => "T",\n  "\xd0\xa3" => "U",\n  "\xd0\xa4" => "F",\n  "\xd0\xa5" => "H",\n  "\xd0\xa6" => "Ts",\n  "\xd0\xa7" => "Ch",\n  "\xd0\xa8" => "Sh",\n  "\xd0\xa9" => "Sht",\n  "\xd0\xac" => "Y",\n  "\xd0\xaa" => "A",\n  "\xd0\xae" => "Yu",\n  "\xd0\xaf" => "Ya",\n  "\xe2\x80\x93" => "-");\n\n return str_replace(array_values($array), array_keys($array), $string);\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n

pak*_*ore 6

首先,您需要一个转换表,定义每个字符的翻译。

然后,您逐个字符地读取字符串,并使用翻译表来获取翻译。容易,对吧?

你可以使用这样的东西:

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;
 }
}
Run Code Online (Sandbox Code Playgroud)

或者你可以使用

replaceEach(String text, String[] searchList, String[] replacementList) 
           Replaces all occurrences of Strings within another String.
Run Code Online (Sandbox Code Playgroud)

从org.apache.commons.lang.StringUtils。您可以使用String[]拉丁字符(但为String)填充 a,然后String[]使用西里尔字符 as填充另一个String,并使用该函数。

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

public String translate(String origin){
return replaceEach(origin,latinCharacters,cyrillicCharacters);
}
Run Code Online (Sandbox Code Playgroud)

  • 没有名为 HashTable 的 Java 类,只有 HashMap 和一个过时的 Hashtable。这些都不能用原始 char 进行参数化。请更正一下。 (2认同)
  • 未通过气味测试。几乎在所有情况下都应避免使用“Hashtable”,而应使用“HashMap”。您不能将原始类型用于泛型。`destiny` 几乎肯定会遇到 `IndexOutOfBoundsException`。该问题涉及可能将一个字符映射到多个字符。 (2认同)