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在右边。