如何将ASCII字符串转换回它们在Java中表示的值

时间:2014-05-15 22:21:39

标签: java regex split ascii

给定一个由多个字符组成的数字字符串' ASCII 表示连接在一起,我想将其解析回原始值。例如,如果我有输入:

String input = "495051108";

字符串可以分为值495051和& 108。在转换为等效字符时,会产生输出"123l"

我认为最好的方法是使用正则表达式,因为分割字符串很容易,而且我要求"预测" 是否是下一个字符以1开头(为了确定我在序列中接下来应该看多少个字符)。

表达这一点的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

鉴于 ASCII 表中的前33个字符是控制字符(不可打印),并且英语中的任何字符都可以在前128个字符范围内表示 - 如果你这似乎是可行的知道输入的来源, 你可以施加一些约束。

这是一个基于你的描述的简单算法,它一次分块输入2或3个字符,直到它的长度减少到零 - 我会留给你自己添加任何验证/错误处理...

public String fromAscii(String str) throws Exception {
    StringBuilder sb = new StringBuilder();
    while(str.length()>0){
        int len = str.startsWith("1") ? 3 : 2;
        sb.append((char) Integer.parseInt(str.substring(0, len)));
        str = str.substring(len);
    }
    return sb.toString();
}

demo