将通用整数类型转换为字符类型

时间:2014-05-12 19:26:18

标签: java arrays generics casting

我的问题是关于转换通用Java类型的主题。假设我们有一个类似的Integer ArrayList:

List<Integer> intFileContents = new ArrayList<Integer>(8192);

现在,我想从列表中检索一个Integer,然后将其作为一个字符打印出来,因为ArrayList实际上是从文本文件中读取字符:

while ((fileBuffer = stream.read())!= -1) {
    intFileContents.add(fileBuffer);
    System.out.print(fileBuffer);
}

如果我使用原始类型,我只是这样投:

char someChar = (char)someInt;

但是,通用类型(Character)intFileContents.get(pos);是不可能的,因为它们是对象。现在,Integer类中有一个方法:Integer.toString(),它应该将所谓的Integer作为字符串返回。不幸的是,它只是,如果我们f.e. had和Integer = 255,String为“255”。这不是我想要的,因为将原始int转换为chars会给出正确ASCII码的字符,所以f.e。 cast(char)65会返回someChar ='A'。这正是我想要的,除了Generic类型。实现这个目标的方法是什么?

1 个答案:

答案 0 :(得分:1)

这里有一些选择。您可以做的一件事是获取整数值,然后转换/打印:

(char) intFileContents.get(pos).intValue(); // Do something with this

可能更好的选择是立即转换您读入的int值,如下所示:

List<Character> charFileContents = new ArrayList<Character>(8192);

while ((fileBuffer = stream.read())!= -1) {
    charFileContents.add((char) fileBuffer); // <-- Do the cast before storing the value
    System.out.print(fileBuffer);
}

然后,当你去打印角色时,它已经是正确的类型了。请注意,这仅适用于一种特定的编码(不记得哪种编码),因此如果您需要其他编码,则必须使用InputStreamReader而不是普通InputStream < / p>