将符号转换为字符串中的不同符号

时间:2019-07-02 11:45:16

标签: java android

假设我们有一个String myString = "abcde" 我们需要为整个字母表中的每个字母分配另一个符号,因此当字符串获取值时,它们将按照指示自动转换。 例: “ a”变成“α”, “ b”变成“β”, “ c”变成“σ”, “ d”变成“δ”, “ e”变成“ε”

我们什至从哪里开始?

3 个答案:

答案 0 :(得分:1)

有几种方法,这是两种:

第一个更易于实现,但是如果您有很多替代品,它将变得更加混乱,而第二个更易于实现和使用,但需要更多代码才能工作。

就个人而言,我会结合使用这两个来对每个映射条目进行一次迭代:在for循环中,对每个可替换字符使用replaceAll()

答案 1 :(得分:1)

您可以运行循环,如下所示:

  • 如果您的字符串很小,并且字典可能包含更多值-通过字符串循环

    Map<String,String> dict = new HashMap<>();
    dict.put("a", "α");
    dict.put("b", "β");
    // .... and so on
    for (char c : myString.toCharArray()) {
        String currentChar = String.valueOf(c);
        if (dict.containsKey(currentChar))
            myString = myString.replaceAll(currentChar,dict.get(currentChar));
    }
    
  • 如果字符串很大,而字典是固定的(例如,仅包含a-z字符)-遍历字典

    Map<String,String> dict = new HashMap<>();
    dict.put("a", "α");
    dict.put("b", "β");
    // .... and so on
    for (String key : dict.keySet()) {
            myString = myString.replaceAll(key,dict.get(key));
    }
    

答案 2 :(得分:0)

我已经写过类似的功能,可以将重音转换为相应的字母,它可以为您提供帮助

public static String ChangeAccentToCorrespondingChar(String string) // at the end of this function we'll only get these elements "^[a-z0-9_-]*$"
    {
        HashMap<Integer,Integer> asciiMap = new HashMap<Integer,Integer>(){{
            put(192, 97); put(193, 97);  put(194, 97);  put(195, 97);  put(196, 97);  put(197, 97);  put(224, 97); put(225, 97); put(226, 97); put(227, 97); put(228, 97); put(229, 97); put(257, 97); put(256, 97); put(170, 97); put(131, 102); put(142, 122); put(158, 122); put(159, 121); put(221, 121); put(253, 121); put(255, 121); put(161, 105); put(204, 105); put(205, 105); put(206, 105); put(207, 105); put(236, 105); put(237, 105); put(238, 105); put(239, 105); put(299, 105); put(162, 99); put(169, 99); put(199, 99); put(231, 99); put(174, 114); put(200, 101); put(201, 101); put(202, 101); put(203, 101); put(232, 101); put(233, 101); put(234, 101); put(235, 101); put(275, 101); put(208, 100); put(209, 110); put(241, 110); put(210,111); put(211,111); put(212,111); put(213,111); put(214,111); put(216, 111); put(240, 111); put(242, 111); put(243, 111); put(244, 111); put(245, 111); put(246, 111); put(248, 111); put(333, 111); put(215, 120); put(217, 117); put(218, 117); put(219, 117); put(220, 117); put(249, 117); put(250, 117); put(251, 117); put(252, 117); put(254, 98);
        }};

        StringBuilder changedString = new StringBuilder();

        char[] charArr = string.toCharArray();
        for (int i=0;i<charArr.length;i++) {
            char character = charArr[i];
            int ascii = character;
            if (asciiMap.containsKey(ascii)) {
                ascii = asciiMap.get(ascii);
                character = (char)ascii;
            } 

        return changedString.toString();
    }

如果您要反向操作,请使用字母重音,您只需在上面的Hashmap中更改ascii值即可检索您的要求。在哈希图中,键是原始字符的ascii,值是新字符的ascii。