Java 将字符串值转换为ASCII
我想获取ASCII值(保存为字符串)的值,并将其转换为字符以显示消息。我尝试了这个方法,它在int b的声明中不断抛出一个越界的索引。它还显示str和b没有值 字符串值=“104 101 108 111”Java 将字符串值转换为ASCII,java,type-conversion,Java,Type Conversion,我想获取ASCII值(保存为字符串)的值,并将其转换为字符以显示消息。我尝试了这个方法,它在int b的声明中不断抛出一个越界的索引。它还显示str和b没有值 字符串值=“104 101 108 111” char[]ch=new char[value.length()]; 对于(int i=0;i
char[]ch=new char[value.length()];
对于(int i=0;i
代码注释:
有一种内置的方法可以获取带有字符串字符的char[]
,因此以下两段代码是相同的:
//问题中的代码
char[]ch=新字符[value.length()];
对于(int i=0;i
循环时增加值时,最好使用for
循环。以下两种写入循环的方式的行为相同,但是for
循环将循环逻辑保持在一起:
//问题中的代码
int i=0;
而(i+2<通道长度){
//这里有一些代码
i=i+3;
}
//用于循环
对于(int i=0;i+2
以下代码行完全错误:
intb=ch[i]+ch[i++]+ch[i+2];
i++
递增该值为i
,但表达式中使用的是递增之前的值,这意味着如果行之前的i=0
,结果与此代码相同:
intb=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后)的计算结果为:
intb=ch[0]+ch[1]+ch[2];
int b=`1`+`0`+`4`;
INTB=49+48+52;
int b=149;
与运行代码的输出相匹配的问题存在,其中第二个打印的数字是149
(在修复问题1之后)
“104”
,并将其转换为一个数字,然后将该ASCII码值转换为字符,如下所示:
String numberStr=value.substring(i,i+3);//例如“104”
int number=Integer.parseInt(numberStr);//例如104
String str=String.valueOf((char)number);//例如“h”
这样,您就不再需要char[]
,因此最终的代码将是:
String value=“104 101 108 111”;
字符串ans=“”;
对于(int i=0;i+2
输出
你好
使用字符串拆分函数
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
我们可以使用Java8
Streams将命令式
代码切换为声明式
代码
需要注意的要点:
声明式风格更具可读性,更易于编写
字符串连接器比简单的字符串连接更快
不需要编写迭代器
如果您希望存储结果,然后将其打印出来,这就是如何完成的
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);
}
}
将ch[i++]
更改为ch[i+1]
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);
}
}