这可能已经回答了其他问题,但是如何获得int值的字符值?
具体来说,我正在从tcp流中读取一个,读者.read()方法返回一个int。
如何从中获取字符?
答案 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)
这里的大多数答案都提出了快捷方式,如果您不知道自己在做什么,可能会给您带来大问题。如果您想采用快捷方式,那么您必须确切知道数据的编码方式。
每当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保留8位来编码1个字符。 ASCII表仅描述了128个可能的字符,因此1位始终未使用。
在这种情况下,您只需执行演员表。
int input = stream.read();
if (input < 0) throw new EOFException();
char character = (char) input;
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);
完成!!