мне нужна простая транслитерация в Android

1

получили 2 массива, латинские и кириллические. получил 1 строку как "мама моет раму" нужно преобразовать в латинский язык, чтобы получить этот "mama_noet_ramu"

используйте этот "Arrays.asList(copyFrom).contains(cur)", чтобы найти массив char в массиве, но не знаете, как получить позицию этого массива char?

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

Спасибо/

Теги:
arrays

2 ответа

2
Лучший ответ

Первоначально я попытался использовать основную функцию, которую вы делали выше, но я быстро понял, что один кириллический символ может отображаться на MULTIPLE Latin, так что замена "char" просто не выполняет эту работу.

Вероятно, лучший способ сделать это, но вот функция, с которой я пришел.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню