[英]Convert a String Value to ASCII
我想获取 ASCII 值的值(保存为字符串)并将其转换为字符以显示消息。 我试过这个,它在int b的声明中不断抛出一个超出范围的索引。它还表明str和b没有值
字符串值 = "104 101 108 108 111";
char[] ch = new char[value.length()];
for (int i = 0; i < value.length(); i++) {
ch[i] = value.charAt(i);
}
System.out.println(ch.length);
String ans = "";
int i = 0;
while (i+2 < ch.length) {
int b= ch[i]+ch[i++]+ch[i+2];
String str = new Character((char) b).toString();
System.out.println(str);
System.out.println(b);
ans = ans+str;
i=i+3;
}
使用字符串拆分 function
String value = "104 101 108 108 111";
String[] arrOfStr = value.split(" ");
String ans = "";
for(String str : arrOfStr) {
String str1 = Character.toString((char)Integer.parseInt(str));
ans += str1;
}
System.out.println(ans); // output: hello
我们可以使用Imperative
8 Streams
将命令式代码切换为Declarative
式代码。
观察要点:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String value = "104 101 108 108 111";
Arrays.stream(value.split(" ")) // Starting a stream of String[]
.mapToInt(Integer::parseInt) // mapping String to int
.mapToObj(Character::toChars) // finding ASCII char from int
.forEach(System.out::print); // printing each character
}
}
如果您希望存储结果然后打印它,这就是如何完成的。
import java.util.Arrays;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
String value = "104 101 108 108 111";
String result = Arrays.stream(value.split(" ")) // Starting a stream of String[]
.mapToInt(Integer::parseInt) // mapping String to int
.mapToObj(Character::toChars) // finding ASCII char from int
.map(String::new) // convert char to String
.collect(Collectors.joining()); // combining individual result using String Joiner
System.out.println(result);
}
}
代码注释:
有一个内置方法可以获取带有字符串字符的char[]
,因此以下两个代码块是相同的:
// Code from question
char[] ch = new char[value.length()];
for (int i = 0; i < value.length(); i++) {
ch[i] = value.charAt(i);
}
// Using built-in method
char[] ch = value.toCharArray();
在循环时增加值时最好使用for
循环。 以下两种编写循环的方式行为相同,但for
循环将循环逻辑保持在一起:
// Code from question
int i = 0;
while (i+2 < ch.length) {
// some code here
i=i+3;
}
// Using for loop
for (int i = 0; i + 2 < ch.length; i=i+3) {
// some code here
}
以下代码行是完全错误的:
int b= ch[i]+ch[i++]+ch[i+2];
i++
递增值是i
,但在表达式中使用的是递增前的值,这意味着如果i = 0
在行前,结果与以下代码相同:
int b = ch[0] + ch[0] + ch[2]; i = i + 1;
您需要将i++
替换为i + 1
,并意识到它们并不相同。
由于您不再在该语句中将i
的值增加 1,因此循环从i=i+3
更改为i = i + 4
,以正确跳过输入中的空格。
ch[i]
的值是一个char
值,它通过使用+
运算符扩展为一个int
值。 char
的int
值是 Unicode 代码点值,对于您的文本,它也与字符的 ASCII 代码相同。
这意味着如果i = 0
,表达式将(在修复问题 #1 之后)评估为:
int b = ch[0] + ch[1] + ch[2]; int b = `1` + `0` + `4`; int b = 49 + 48 + 52; int b = 149;
这与运行代码中的 output 相匹配,其中第二个打印数字是149
(在修复问题 #1 之后)。
您真正想要的是获取 substring "104"
并将其转换为数字,然后将该 ASCII 码值转换为char
,如下所示:
String numberStr = value.substring(i, i + 3); // E.g. "104"
int number = Integer.parseInt(numberStr); // E.g. 104
String str = String.valueOf((char) number); // E.g. "h"
这样,您不再需要char[]
,因此最终代码将是:
String value = "104 101 108 108 111";
String ans = "";
for (int i = 0; i + 2 < value.length(); i += 4) {
String numberStr = value.substring(i, i + 3);
int number = Integer.parseInt(numberStr);
String str = String.valueOf((char) number);
ans = ans + str;
}
System.out.println(ans);
Output
hello
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.