2011-05-22 44 views
1

有2个数组,拉丁和cyrilic。 了1串像“мамамоетраму” 需要转换为拉丁得到这个“mama_noet_ramu”我需要简单的音译在android

使用这种“Arrays.asList(的copyfrom)。载有(现)”发现如果在阵列中的字符但不知道如何获得这个字符在数组中的位置?

char[] copyTo = {'a','b','v','g','d','e','e','g','z','i','i','k','l','m','n','o','p','R','S','T','U','f','h','c','h','h','h',' ',' ',' ','e','u','y','_'}; 
    char[] copyFrom = {'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','щ','ш','ь','ы','ъ','э','ю','я',' '}; 

感谢/

回答

2

起初,我试图建立对这是你在上面做的基本功能,但是我很快就知道一个西里尔字符可能映射到多个拉丁字符 - 所以做一个“字符”替换就不能完成这项工作。

可能有更好的方法来做到这一点,但这里是我想出的功能。

public static String transliterate(String srcstring) { 
    ArrayList<String> copyTo = new ArrayList<String>(); 

    String cyrcodes = ""; 
    for (int i=1040;i<=1067;i++) { 
     cyrcodes = cyrcodes + (char)i; 
    } 
    for (int j=1072;j<=1099;j++) { 
     cyrcodes = cyrcodes + (char)j; 
    } 
    // Uppercase 
    copyTo.add("A"); 
    copyTo.add("B"); 
    copyTo.add("V"); 
    copyTo.add("G"); 
    copyTo.add("D"); 
    copyTo.add("E"); 
    copyTo.add("Zh"); 
    copyTo.add("Z"); 
    copyTo.add("I"); 
    copyTo.add("I"); 
    copyTo.add("K"); 
    copyTo.add("L"); 
    copyTo.add("M"); 
    copyTo.add("N"); 
    copyTo.add("O"); 
    copyTo.add("P"); 
    copyTo.add("R"); 
    copyTo.add("S"); 
    copyTo.add("T"); 
    copyTo.add("U"); 
    copyTo.add("F"); 
    copyTo.add("Kh"); 
    copyTo.add("TS"); 
    copyTo.add("Ch"); 
    copyTo.add("Sh"); 
    copyTo.add("Shch"); 
    copyTo.add(""); 
    copyTo.add("Y"); 

    // lowercase 
    copyTo.add("a"); 
    copyTo.add("b"); 
    copyTo.add("v"); 
    copyTo.add("g"); 
    copyTo.add("d"); 
    copyTo.add("e"); 
    copyTo.add("zh"); 
    copyTo.add("z"); 
    copyTo.add("i"); 
    copyTo.add("i"); 
    copyTo.add("k"); 
    copyTo.add("l"); 
    copyTo.add("m"); 
    copyTo.add("n"); 
    copyTo.add("o"); 
    copyTo.add("p"); 
    copyTo.add("r"); 
    copyTo.add("s"); 
    copyTo.add("t"); 
    copyTo.add("u"); 
    copyTo.add("f"); 
    copyTo.add("kh"); 
    copyTo.add("ts"); 
    copyTo.add("ch"); 
    copyTo.add("sh"); 
    copyTo.add("shch"); 
    copyTo.add(""); 
    copyTo.add("y");   

    String newstring = ""; 
    char onechar; 
    int replacewith; 
    for (int j=0; j<srcstring.length();j++) { 
     onechar = srcstring.charAt(j); 
     replacewith = cyrcodes.indexOf((int)onechar); 
     if (replacewith > -1) { 
      newstring = newstring + copyTo.get(replacewith); 
     } else { 
      // keep the original character, not in replace list 
      newstring = newstring + String.valueOf(onechar); 
     } 
    } 

    return newstring; 
} 
0

Arrays.asList(CopyTo从).indexOf(对象)

和BTW将返回-1如果对象不在CopyTo从