在java中将int的流转换为char

时间:2009-05-07 09:32:43

标签: java types

这可能已经回答了其他问题,但是如何获得int值的字符值?

具体来说,我正在从tcp流中读取一个,读者.read()方法返回一个int。

如何从中获取字符?

12 个答案:

答案 0 :(得分:144)

也许你要求:

Character.toChars(65) // returns ['A']

更多信息:Character.toChars(int codePoint)

  

将指定的字符(Unicode代码点)转换为存储在char数组中的UTF-16表示形式。如果指定的代码点是BMP(基本多语言平面或平面0)值,则生成的char数组与codePoint具有相同的值。如果指定的代码点是补充代码点,则生成的char数组具有相应的代理对。

答案 1 :(得分:105)

这取决于“将int转换为char”的含义。

如果您只想在int中强制转换值,可以使用Java的类型转换符号来强制转换它:

int i = 97; // 97 is 'a' in ASCII
char c = (char) i; // c is now 'a'

如果你的意思是将整数1转换为字符'1',你可以这样做:

if (i >= 0 && i <= 9) {
char c = Character.forDigit(i, 10);
....
}

答案 2 :(得分:74)

如果您尝试将流转换为文本,则需要了解要使用的编码。然后,您可以将一个字节数组传递到String构造函数并提供Charset,或者使用InputStreamReader代替相应的Charset

int转换为char仅适用于ISO-8859-1,如果您直接从流中读取字节。

编辑:如果 已经使用Reader,那么将read()的返回值转换为char是正确的方法(检查后)是否为-1)...但通常更有效和方便的是调用read(char[], int, int)一次读取整个文本块。不要忘记检查返回值,以查看已读取的字符数。

答案 3 :(得分:29)

如果你想简单地将int 5转换为char'5': (仅适用于整数0 - 9)

int i = 5;
char c = (char) ('0' + i); // c is now '5';

答案 4 :(得分:8)

简单铸造:

int a = 99;
char c = (char) a;

这有什么理由不适合你吗?

答案 5 :(得分:4)

此解决方案适用于整数长度大小= 1。

Integer input = 9; Character.valueOf((char) input.toString().charAt(0))

如果size> 1,我们需要使用for循环并迭代。

答案 6 :(得分:1)

这里的大多数答案都提出了快捷方式,如果您不知道自己在做什么,可能会给您带来大问题。如果您想采用快捷方式,那么您必须确切知道数据的编码方式。

UTF-16

每当java在其文档中讨论字符时,它都会讨论16位字符。

您可以使用DataInputStream,它有方便的方法。为了提高效率,请将其打包在BufferedReader

// e.g. for sockets
DataInputStream in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
char character = readChar(); // no need to cast

问题是每个readChar()实际上会执行2 read并将它们组合成一个16位字符。

US-ASCII

US-ASCII保留8位来编码1个字符。 ASCII表仅描述了128个可能的字符,因此1位始终未使用。

在这种情况下,您只需执行演员表。

int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;

扩展ASCII

UTF-8,Latin-1,ANSI和许多其他编码使用所有8位。第一个7位跟随ASCII表,与US-ASCII编码的相同。但是,第8位提供了所有这些编码中不同的字符。所以,这里的事情变得有趣。

如果你是牛仔,你认为第8位并不重要(即你不关心像“à,é,ç,è,ô......”这样的人物,那么你可以得到离开一个简单的演员。

但是,如果您想要专业地执行此操作,则在导入/导出文本时(例如套接字,文件...),您应该始终指定字符集。

始终使用字符集

让我们认真对待。以上所有选项都是便宜的技巧。如果要编写灵活的软件,则需要支持可配置的字符集来导入/导出数据。这是一个通用的解决方案:

使用byte[]缓冲区读取您的数据,并使用charset参数将其转换为String

byte[] buffer = new byte[1024];
int nrOfBytes = stream.read(buffer);
String result = new String(buffer, nrOfBytes, charset);

您还可以使用可以使用charset参数进行实例化的InputStreamReader

还有一条黄金法则:不要直接将一个字节转换为字符。这总是一个错误。

答案 7 :(得分:1)

假设用户只是想将int转换为char,例如

,我的答案基于

Input: 
int i = 5; 
Output:
char c = '5'

上面已经回答过,但如果整数值为i > 10,则需要使用char array

char[] c = String.valueOf(i).toCharArray();

答案 8 :(得分:1)

    int i = 7;
    char number = Integer.toString(i).charAt(0);
    System.out.println(number);

答案 9 :(得分:0)

这完全取决于传入数据的编码。

答案 10 :(得分:0)

也许不是最快的一个:

//for example there is an integer with the value of 5:
int i = 5;

//getting the char '5' out of it:
char c = String.format("%s",i).charAt(0); 

答案 11 :(得分:-2)

将char转换为int或long的答案是简单的转换。

例如: - 如果您想将Char'0'转换为long。

遵循简单的演员

Char ch='0';
String convertedChar= Character.toString(ch);  //Convert Char to String.
Long finalLongValue=Long.parseLong(convertedChar);

完成!!