java - 我需要在 android 中进行简单的音译

标签 java android arrays

有 2 个数组,拉丁文和西里尔文。 得到 1 个字符串,如“мама моет раму” 需要转换成拉丁语才能得到这个“mama_noet_ramu”

使用这个“Arrays.asList(copyFrom).contains(cur)”来查找数组中是否有一个字符,但不知道如何获取这个字符在数组中的位置?

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

谢谢/

最佳答案

最初我尝试构建您在上面所做的基本功能,但我很快了解到单个西里尔字母字符可能映射到多个拉丁字符 - 因此进行“字符”替换并不能完成这项工作。

可能有更好的方法来执行此操作,但这是我想出的函数。

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

关于java - 我需要在 android 中进行简单的音译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6089433/

相关文章:

java - 在 Android Studio 中从 Java 更改 String.xml 文件

Java 字节数组中表达式的非法开头

c - 有一个结构变量代表标签

java - C++ 和 Java 程序之间的交互/通信

java - Java中的形状模式匹配算法

java - 在android中以编程方式添加到布局中时如何从许多EditText中获取数据

java - 切换到新的 Activity/应用页面时应用崩溃

android - 来自服务器的数据未保存在共享首选项中

ruby - 获取 Ruby 中数组排序排列的索引?

java - 运行应用程序时线程 "Timer-0"中抛出异常