给定一个由多个字符组成的数字字符串' ASCII 表示连接在一起,我想将其解析回原始值。例如,如果我有输入:
String input = "495051108";
字符串可以分为值49
,50
,51
和& 108
。在转换为等效字符时,会产生输出"123l"
。
我认为最好的方法是使用正则表达式,因为分割字符串很容易,而且我要求"预测" 是否是下一个字符以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();
}