请帮我编写一个java函数将字符串转换为数值
函数必须接受一个字符串,它应该返回一个包含数字的整数数组
每个字母表的数值如下所示: -
1 = A J J Q Y
2 = B K R
3 = C G L S
4 = D M T
5 = E H N X
6 = O Z
8 = F P
对于字符串“堆栈溢出”
数值= 3 4 1 3 2 7 6 5 2 8 3 7 6“
例如: -
输入: - 字符串str =“堆栈溢出”; 。 。 。 。 .//ignoring spaces
返回 array = {3,4,1,3,2,7,6,5,2,8,3,7,6};
答案 0 :(得分:6)
我会将你的数值添加到一个hashmap
{A=>1, I=>1, J=>1, Q=>1, Y=>1, B=>2, K=>2, ...}
比迭代字符串,查找地图中的每个值,并将其添加到列表中。 对于查找,您可能需要对您的角色进行UpperCase。
for(Char c in input) {
Integer n = lookup(c);
if(found) {
result.add(n);
}
}
最后将列表转换为int数组
答案 1 :(得分:1)
将所有字母放入地图中,其值为您想要的值。
E.g。
HashMap hm = new HashMap();
hm.put ('A', new Integer (1));
hm.put ('B', new Integer (2));
然后使用
int arr [] = new int [myString.length ()];
for (int x = 0; x < myString.length ();) {
Integer i = (Integer) hm.get (myString.charAt(x));
if (i!=null) {
arr[x++] = i;
}
}
答案 2 :(得分:1)
首先将您的信件添加到 HashMap :
HashMap<String, Integer> yourMap = new HashMap<>();
yourMap.put("aijqy", 1);
yourMap.put("bkr", 2);
yourMap.put("cgls", 3);
yourMap.put("dmt", 4);
yourMap.put("ehnx", 5);
yourMap.put("oz", 6);
yourMap.put("fp", 8);
然后,如果你有一个给定的String,你可以使用“toLowerCase()”和“split()”方法将其小写并将其拆分为单个字符,并使用空字符串作为参数。
你迭代每个字母并执行:
String finalString = "";
for(String letter : yourString.split("")){
for(Map.Entry entry : yourMap.entrySet()){
if(entry.getKey().indexOf(letter) != -1){
finalString += entry.getValue();
break;
}
}
}
答案 3 :(得分:0)
您使用的是哪个版本的Java?从java 7开始,字符串是有效的switch语句。
答案 4 :(得分:0)
自己检查一下是否正确
int [] arr={1,2,3,4,5,8,3,5,1,1,2,3,4,5,6,8,1,2,3,4,-1,-1,-1,5,1,6};
then touppercase then ascii then add -65
then if(>0) or add those letters too
这里是快速的东西(不是缺少一些字母)
int [] arr={1,2,3,4,5,8,3,5,1,1,2,3,4,5,6,8,1,2,3,4,-1,-1,-1,5,1,6};
for (char ch: "Stackoverflow".toUpperCase().toCharArray()) {
if(ch>='A' && ch<='Z'){
System.out.println("value " + arr[((int)ch-65)]);
}
}
以下是您的情况:
String str="Stack overflow".toUpperCase();
int res[]=new int[str.length()];
int lastindex=0;
for(int i=0;i<str.length();i++){
int ch=str.charAt(i);
if(ch>=(int)'A' && ch<=(int)'Z'){
//if you want skip not mapped ones just add if(arr[(int)ch-(int)'A']>0)
res[lastindex]=arr[(int)ch-(int)'A'];
lastindex++;//ignoring others
}
}
for (int j=0;j<lastindex;j++){
System.out.print ( res[j] +",");
}
答案 5 :(得分:0)
输出为:[3,4,1,3,2,6,5,2,8,3,6],因为'w'不在你的映射中
String convert = "Stack overflow".toLowerCase();
Map<Character, Integer> mapping = new HashMap<>();
mapping.put('a', 1);
mapping.put('i', 1);
mapping.put('j', 1);
mapping.put('q', 1);
mapping.put('y', 1);
mapping.put('b', 2);
mapping.put('k', 2);
mapping.put('r', 2);
mapping.put('c', 3);
mapping.put('g', 3);
mapping.put('l', 3);
mapping.put('s', 3);
mapping.put('d', 4);
mapping.put('m', 4);
mapping.put('t', 4);
mapping.put('e', 5);
mapping.put('h', 5);
mapping.put('n', 5);
mapping.put('x', 5);
mapping.put('o', 6);
mapping.put('z', 6);
mapping.put('f', 8);
mapping.put('p', 8);
List<Integer> out = new ArrayList<Integer>();
for(char c : convert.toCharArray()){
Integer find = mapping.get(new Character(c));
if (find!=null) {
out.add(find);
}
}
return out.toArray(new Integer[out.size()]);