Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将符号转换为字符串中的不同符号_Java_Android - Fatal编程技术网

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

Java 将符号转换为字符串中的不同符号,java,android,Java,Android,假设我们有一个字符串myString=“abcde” 我们需要为整个字母表的每个字母指定另一个符号,因此当字符串获得值时,它们会按照指示自动转换。 例子: “a”变成“α”, “b”变成“β”, “c”变成“σ”, “d”变为“δ”, “e”变为“ε” 我们从哪里开始呢?有几种方法可以做到这一点,这里有两种: 多次使用replaceAll()方法(),这基本上允许您将字符串中出现的每个字符替换为其他字符 通过创建一个映射和一个函数,遍历字符串并用对应的字符替换每个字符 第一种更容易实现,但如

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


我们从哪里开始呢?

有几种方法可以做到这一点,这里有两种:

  • 多次使用
    replaceAll()
    方法(),这基本上允许您将字符串中出现的每个字符替换为其他字符
  • 通过创建一个映射和一个函数,遍历字符串并用对应的字符替换每个字符
第一种更容易实现,但如果有大量替换,则会更混乱,而第二种更易于实现和使用,但需要更多代码才能工作


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

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

  • 如果字符串很小并且字典可能包含更多值-在字符串中循环:

    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));
    }
    
    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));
    }
    
    Map dict=newhashmap();
    dict.put(“a”、“α”);
    dict.put(“b”、“β”);
    // .... 等等
    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 (char c : myString.toCharArray()) {
        String currentChar = String.valueOf(c);
        if (dict.containsKey(currentChar))
            myString = myString.replaceAll(currentChar,dict.get(currentChar));
    }
    
    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));
    }
    
    Map dict=newhashmap();
    dict.put(“a”、“α”);
    dict.put(“b”、“β”);
    // .... 等等
    for(字符串键:dict.keySet()){
    myString=myString.replaceAll(key,dict.get(key));
    }
    

我已经编写了一个类似的函数来将重音转换为相应的字母表,它可以帮助您

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();
    }
publicstaticstringchangeancentocorrespondingchar(stringstring)//在这个函数的末尾,我们只会得到这些元素“^[a-z0-9_-]*$”
{
HashMap ascimap=newhashmap(){{
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(255,121);put(161,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(234,101);put(235,101);put(275,101);put(208,101);put(208,100);put(209110);put(2411110);put(210111);put(211111);put(211111);put(213111);put(213111);put(214111);put(216111);put(240111);put(242,111);put(243111);put(244111);put(245111);put(246111);put(248111);put(333111);put(215120);put(217117);put(218117);put(219117);put(220117);put(249117);put(250117);put(251117)(252117),put(254,98),;
}};
StringBuilder changedString=新StringBuilder();
char[]charArr=string.toCharArray();

对于(int i=0;i)创建一个映射,该映射将为您提供与字符对应的值。到目前为止,您尝试了什么?您可以使用映射进行操作,这很简单。我在理论上理解这个概念,但您能否更具体一点?Hashmap以a作为键,alpha符号作为值
字典=[{a,α},{b,β},{c,σ}…];例如(key:dictionary.getKeys()){str=str.replaceAll(key,dictionary.get(key))}
…这是一个多么低效的循环,为什么要迭代所有的键,即使它们可能不在原始字符串中。而是迭代myString字符集和replaceAll@Shail016这一个基于我的概念性评论,这就是为什么它有相同的方法:)没有像
getKeys()这样的方法
-应该是
Map::keySet
,因为
循环定义也是错误的-应该是
for(键入key:…)
。此外,我会选择Map::forEach而不是for loop,但由于这是标记为android的-我不会…如果我理解正确,我是否必须替换“put”中的数字对于字母?如果是的话,哪一个先到原始字符还是我想要的字符?是的,这些数字是字符的ascii值。在原始字符的左边是ascii,在新字符的右边是ascii。在我的例子中,192是ascii的“À”,97是ascii的“a”。所以“À”将被替换为“a”。如果你想更改“a”为了“À”(倒序),你可以保持97在左边,192在右边。