将字母映射到数字的最佳方法

时间:2019-04-05 09:17:22

标签: java

将字母映射为数字的最佳方法是什么。用例:

'A' -> 1,
'B' -> 2,
'C' -> 3,
    .
    . 
'Z' -> 26

然后再次重复

'A' -> 27
'B' -> 28 
    .
    .
'Z' -> 52

再来

'A' -> 53

映射此的最佳方法是什么?例如说到数字100

预期的结果应该是当给出输入“ A”时,我需要获取映射到“ A”的相应数字的列表。在这种情况下1,27,53 ...

由于我是编程新手,所以我想到的解决方案是切换大小写,枚举等,但我相信有更好的解决方案。我正在使用Java

5 个答案:

答案 0 :(得分:3)

您的输入是char。例如:

char input = 'A';

您可以使用input - 'A'来获取字母和'A'之间的差异。然后使用for循环,在此循环中,每一步将26增加直到100:

char input = 'A';

for (int i = input - 'A' + 1; i < 100; i += 26) {
    System.out.println(i);
}

输出

1
27
53
79

对于反向操作,您将使用模26(运算符%)。模26将映射:

  • 0、​​26、52 ...至0
  • 1、27、53 ...到1
  • 2、28、54 ...至2

这是代码:

int input = 27;
char output = (char)('A' + (input - 1) % 26);
System.out.println(output);

输出

A

答案 1 :(得分:2)

您可以将char转换为int。这将为您提供ASCII值。减去64将得到1的{​​{1}}。您可以在循环中使用它来打印索引,这时每次迭代将添加26。在下面的示例中,我使用'A'作为要打印的最大索引。

maxNum

答案 2 :(得分:2)

以下是使用Stream s的版本:

public static void main(String[] args) {
    System.out.println(Arrays.toString(mapLetterToNumber('Z')));
}

public static int[] mapLetterToNumber(char c) {
    int firstNum = c - 'A' + 1;
    return IntStream.iterate(0, x -> x + 1).map(x -> firstNum + x * 26).limit(100 / 26 + 1).filter(x -> x <= 100).toArray();
}

如果您希望它升到另一个数字,请用该数字替换100

如果要在数组中保留一定数量的元素,请删除filter调用,然后将该数字放入limit中。例如,如果您只想要五个元素:

return IntStream.iterate(0, x -> x + 1).map(x -> firstNum + x * 26).limit(5).toArray();

在Java 9中,您可以使用takeWhile来代替limitfilter的调用:

return IntStream.iterate(0, x -> x + 1).map(x -> firstNum + x * 26).takeWhile(x -> x <= 100).toArray();

答案 3 :(得分:1)

您可以使用HashMap来存储每个字母及其关联的数字(这里我使用字符串按空格分隔数字):

Map<Character,String> myMap = new HashMap<>();  

for (int i = 1; i <= 100; i++) {
    for (char alphabet = 'A'; alphabet <= 'Z'; alphabet++) {
        if (myMap.containsKey(alphabet)) {
            myMap.put(alphabet, myMap.get(alphabet) + " " + String.valueOf(i++));
        } else {
            myMap.put(alphabet,String.valueOf(i++));
        }                     
    }
}    
System.out.println(myMap.toString());

打印地图会显示以下内容:

  

{A = 1 28 55 82,B = 2 29 56 83,C = 3 30 57 84,D = 4 31 58 85,E = 5 32 59 86,   F = 6 33 60 87,G = 7 34 61 88,H = 8 35 62 89,I = 9 36 63 90,J = 10 37 64 91,   K = 11 38 65 92,L = 12 39 66 93,M = 13 40 67 94,N = 14 41 68 95,O = 15 42 69   96,P = 16 43 70 97,Q = 17 44 71 98,R = 18 45 72 99,S = 19 46 73 100,T = 20   47 74 101,U = 21 48 75 102,V = 22 49 76 103,W = 23 50 77 104,X = 24 51 78   105,Y = 25 52 79106,Z = 26 53 80 107}

答案 4 :(得分:0)

这是一种将字母转换为整数的方法:

  public class MyClass
  {
    public static void main(String[] args)
    {
      int index = Integer.parseInt("A", 36) - 9;
      System.out.println(index);
    }
  }

我知道您的问题搞砸了,如果您解决了问题,就会解决我的问题。