按字符翻译字符串
我应该如何去实现一种方法,该方法获取由拉丁字符组成的字符串,将其转换为由不同字符集组成的字符串,例如西里尔字母。按字符翻译字符串
下面是它是如何在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);
}
首先你需要一个转换表,确定翻译为每个字符。
然后,您通过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;
}
}
另外,您可以使用
replaceEach(String text, String[] searchList, String[] replacementList)
Replaces all occurrences of Strings within another String.
从org.apache.commons.lang.StringUtils
。 您可以使用拉丁字符(但是为String
)填充String[]
,然后使用西里尔文字符填充另一个String[]
,并使用该函数。
String[] latinCharacters = [] //Populate them
String[] cyrillicCharacters = [] //Populate them
public String translate(String origin){
return replaceEach(origin,latinCharacters,cyrillicCharacters);
}
没有Java类名为HashTable,只有HashMap和过时的Hashtable。这些都不能用原始字符参数化。请纠正这一点。 – 2010-06-16 08:30:58
不通过气味测试。几乎在所有情况下都应避免使用“Hashtable”,而使用“HashMap”。您不能使用泛型的基本类型。 'destiny'几乎肯定会遇到'IndexOutOfBoundsException'。这个问题涉及到可能将一个字符映射到多个字符。 – Mike 2010-06-16 08:36:03
根据@Michael评论修正。我是这么做的,所以他可以知道如何去做。 – pakore 2010-06-16 08:40:07
你的问题是不明确的。术语“拉丁字符”和“西里尔文字符”不明确:存在许多不同的“拉丁”和“西里尔字母”字符集。如果你正在考虑特定的东西,比如两个特定的Windows字符集,请在你的问题中这么说。在Java中,Strings使用Unicode,而不是任何这样的字符集,所以制定的问题没有意义,并且您可能需要从这些字符集和Unicode转换成/。 – reinierpost 2010-06-16 08:15:54
@reinierpost OP使用PHP示例指定他感兴趣的拉丁字母和西里尔字符'翻译' – 2017-06-25 18:23:15