2011-05-22 99 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從