开发者

i need simple transliteration in android

got 2 arrays, latin and cyrilic. got 1 string like "мама моет раму" need to convert to latin to get this "mama_noet_ramu"

use this "Arrays.asList(copyFrom).contains(cur)" to find if there is a char in array but dont know how to get the position of this char开发者_C百科 in array?

  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 = {'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','щ','ш','ь','ы','ъ','э','ю','я',' '};

Thanks/


Initially I tried to build on the basic function you did above, but I quickly learned that a single Cyrillic character may map to MULTIPLE Latin characters - so doing a "char" replacement just doesn't do the job.

There's probably a better way to do this, but here's the function I came up with.

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;
}


Arrays.asList(copyTo).indexOf(object)

and btw will return -1 if object is not in copyTo

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜