将字母映射为数字的最佳方法是什么。用例:
'A' -> 1,
'B' -> 2,
'C' -> 3,
.
.
'Z' -> 26
然后再次重复
'A' -> 27
'B' -> 28
.
.
'Z' -> 52
再来
'A' -> 53
映射此的最佳方法是什么?例如说到数字100
预期的结果应该是当给出输入“ A”时,我需要获取映射到“ A”的相应数字的列表。在这种情况下1,27,53 ...
由于我是编程新手,所以我想到的解决方案是切换大小写,枚举等,但我相信有更好的解决方案。我正在使用Java
答案 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将映射:
等
这是代码:
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
来代替limit
和filter
的调用:
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);
}
}
我知道您的问题搞砸了,如果您解决了问题,就会解决我的问题。