JAVA-如何将字符串中的字母转换为指定的数字?

时间:2014-02-18 07:57:09

标签: java string

请帮我编写一个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};

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()]);