Java 将字符串值转换为ASCII

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

我想获取ASCII值(保存为字符串)的值,并将其转换为字符以显示消息。我尝试了这个方法,它在int b的声明中不断抛出一个越界的索引。它还显示str和b没有值

字符串值=“104 101 108 111”

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);
        }
    
    }