我正在尝试使用Java映射数字和特殊字符,但仅映射字母.0到9的数字和特殊符号未映射。此代码的输出是所有带有其分配数字的字母,但没有数字已映射。
import java.util.*;
class maptable {
public static void main(String args[]) {
Map<Character, Integer> hm = new HashMap<Character, Integer>();
hm.put('A', new Integer(1));
hm.put('B', new Integer(2));
hm.put('C', new Integer(3));
hm.put('D', new Integer(4));
hm.put('E', new Integer(5));
hm.put('F', new Integer(6));
hm.put('G', new Integer(7));
hm.put('H', new Integer(8));
hm.put('I', new Integer(9));
hm.put('J', new Integer(10));
hm.put('K', new Integer(11));
hm.put('L', new Integer(12));
hm.put('M', new Integer(13));
hm.put('N', new Integer(14));
hm.put('O', new Integer(15));
hm.put('P', new Integer(16));
hm.put('Q', new Integer(17));
hm.put('R', new Integer(18));
hm.put('S', new Integer(19));
hm.put('T', new Integer(20));
hm.put('U', new Integer(21));
hm.put('V', new Integer(22));
hm.put('W', new Integer(23));
hm.put('X', new Integer(24));
hm.put('Y', new Integer(25));
hm.put('Z', new Integer(26));
hm.put('0', new Integer(27));
hm.put('1', new Integer(28));
hm.put('2', new Integer(29));
hm.put('3', new Integer(30));
hm.put('4', new Integer(31));
hm.put('5', new Integer(32));
hm.put('6', new Integer(33));
hm.put('7', new Integer(34));
hm.put('8', new Integer(35));
hm.put('9', new Integer(36));
Set<Map.Entry<Character, Integer>> st = hm.entrySet();
for (Map.Entry<Character, Integer> me : st) {
System.out.print(me.getKey() + ":");
System.out.println(me.getValue());
}
}
}
答案 0 :(得分:0)
代码有效。
HashMap没有排序,但是由值的hashCode排序。
这可能意味着您首先看到字母或最后一个字母;因为他们的哈希码可能会使用其int值。
一个问题可能是特殊字符。 Java文本以Unicode(String
,char
)完成,但是char
仅保留UTF-16。因此,中文Unicode符号可能会转换为两个char
(称为<代理代理对)。对于此类用法,最好在类型为int
的Java中使用Unicode 代码点。
例如,使用印地语或阿拉伯数字时的另一个问题是,编译器必须使用与编辑器相同的编码(请检查IDE),否则.java文件中的字节将以不同的方式解释。如今,国际项目通常使用Unicode UTF-8。
通常,即使其中一些是垃圾代码,通常也希望在上面的代码中至少看到26 + 10行。否则,在非法字节序列(通常使用UTF-8)或不受支持的编码上出现堆栈跟踪异常。
一个问题通常是命令行,它可能使用系统有限的单字节编码。
最后有个小改进:
hm.put('Z', Integer.valueOf(26));
hm.put('0', Integer.valueOf(27));
Java缓存一些Integer对象,通常从-128到127。
另外,java可以使用valueOf
自动 box 基本类型(= char / int / double / boolean / ...)值。
hm.put('Z', 26);
hm.put('0', 27);
实际上,您已经在不知不觉中(?)对字符'Z'进行了此操作:Character.valueOf('Z')
。
答案 1 :(得分:0)
public static int convert(char ch) {
if (Character.isAlphabetic(ch))
return Character.toLowerCase(ch) - 'a' + 1;
if (Character.isDigit(ch))
return ch - '0' + 27;
return -1;
}