JAVA把ASCII码转变为字符串

这个是处理函数
public static String ascii2String(String ASCIIs) {
String[] ASCIIss = ASCIIs.split(",");
StringBuffer sb = new StringBuffer();
for (int i = 0; i < ASCIIss.length; i++) {
sb.append((char) ascii2Char(Integer.parseInt(ASCIIss[i])));
}
return sb.toString();
}
这个是主函数
public static void main(String[] args){
String output="1041011081123210910133";
System.out.println("output="+output);
String op=new String();
op=ascii2String(output);
System.out.println("op="+op);
}
为什么控制台老是说
Exception in thread "main" java.lang.NumberFormatException: For input string: "1041011081123210910133"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at ascii.ascii2String(ascii.java:59)
at ascii.main(ascii.java:108)
我该如何修改啊!!!要哭了都!

public class TTTTT {

    public static void main(String[] args) {
        String string = "1041011081123210910133";
        System.out.println(asciiToString(string));
    }

    public static String asciiToString(String text) {
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < text.length(); i++) {
            if (text.charAt(i) <= '2' && i <= text.length() - 3) {
                int code = Integer.parseInt(text.substring(i, i + 3));
                builder.append((char) code);
                i += 2;
            } else {
                int code = Integer.parseInt(text.substring(i, i + 2));
                builder.append((char) code);
                i += 1;
            }
        }
        return builder.toString();
    }

}

你这编码很怪啊,结果竟然是help me!

1041011081123210910133
解析起来很麻烦那,不是3位3位的。
104
101
108
112
32
109
101
33

追问

哈哈,被你发现了。。。

追答public class TTTTT {

    public static void main(String[] args) {
        String string = "1041011081123210910133";
        System.out.println(asciiToString(string));
    }

    public static String asciiToString(String text) {
        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < text.length(); i++) {
            if (text.charAt(i) == '1' && i < text.length() - 2) {
                int code = Integer.parseInt(text.substring(i, i + 3));
                builder.append((char) code);
                i += 2;
            } else if (i < text.length() - 1) {
                int code = Integer.parseInt(text.substring(i, i + 2));
                builder.append((char) code);
                i += 1;
            }
        }
        return builder.toString();
    }
    
}

最终版,你原先的程序是超过Integer的取值范围了,关键是逻辑也不对。


还请采纳!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-13
sb.append((char) ascii2Char(Integer.parseInt(ASCIIss[i]))); 是怎么定义的??
你看看,你把你传入的参数分段了,ASCIIss = ASCIIs.split(",");

因为你传入的String output="1041011081123210910133" 没有",",所以,最终的ASCIIss.length=1; ASCIIss[0]="1041011081123210910133"。
然后你用这个字符串,转换为int,可能是超出了int的取值范围了,所以出错
第2个回答  2013-09-13
电饭锅等他一会法国恢复追问

一会英国恢复行不行= =

第3个回答  2013-09-13
你进来的是纯数字的string,为什么要用split(",")呢?这样无意义吧追问

这是一部分代码。output是将字符串变成的ascii码。现在要变回去。。

追答

你的output是十进制的ASCII码值?

追问

是的

第4个回答  2013-09-13
把这个方法也贴上来 ascii2Char追问

public static char ascii2Char(int ASCII) {
return (char) ASCII;
}

public static int char2ASCII(char c) {
return (int) c;
}

追答public static void main(String[] args) {
        String output = "1041,0110,8112,3210,9101,33";
        System.out.println("output=" + output);
        String op = new String();
        op = ascii2String(output);
        System.out.println("op=" + op);
    }

输出结果:op=Бn???!

相似回答