1)若已知字符串的当前字符不是大于0的数字字符,则复制该字符于新字符串中;
(2)若已知字符串的当前字符是一个数字字符,且它之后没有后继字符,则简单地将它复制到新字符串中;
(3)若已知字符串的当前字符是一个大于0的数字字符,并且还有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中;
(4)以上述一次变换为一组,在不同组之间另插入一个下划线'_'用于分隔;
(5)若已知字符串中包含有下划线'_',则变换为 ”\UL” 。public class Code {
public StringBuffer encode(String str){
char[] chs = str.toCharArray();
StringBuffer sb = new StringBuffer();
boolean change = false;//是否变化
for(int i = 0; i < chs.length; i++){
//若已知字符串的当前字符不是大于0的数字字符,则复制该字符于新字符串中;
if(chs[i] < 48 || chs[i] >57){
sb.append(chs[i]);
change = true;
}
//若已知字符串的当前字符是一个数字字符
if(chs[i] > 48 || chs[i] <= 57){
//且它之后没有后继字符,则简单地将它复制到新字符串中;
if(i == (chs.length -1)){
sb.append(chs[i]);
}else{//有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中;
String sss = String.valueOf(chs[i]);
int number = Integer.parseInt(sss);
for(int j = 0; j <= number; j++){
sb.append(chs[i]);
change = true;
}

}
}
//以上述一次变换为一组,在不同组之间另插入一个下划线'_'用于分隔;
if(change){
sb.append("_");
change = false;
}
if(chs[i] == '_'){
sb.append("\\UL");
}
}
return sb;
}
public static void main(String[] args) {
System.out.println(new Code().encode("24ab_2t2"));
}}运行报java.lang.NumberFormatException异常,请问问题出在哪,网上看了下这个异常是因为非数字字符转成数字导致的,但我实在看不看有什么问题,求解

解决方案 »

  1.   

    第13行修改为 if(chs[i] >= 48 &&  chs[i] <= 57){
      

  2.   

    下面按照要求写的····你之前写的很有问题·····
    package fortest;public class Code {
    public StringBuffer encode(String str) {
    char[] chs = str.toCharArray();
    StringBuffer sb = new StringBuffer();

    for (int i = 0; i < chs.length; i++) {
    // 若已知字符串的当前字符不是大于0的数字字符,则复制该字符于新字符串中;
    if (chs[i] < 48 || chs[i] > 57) {
    if (chs[i] == 95) {
    sb.append("\\UL");
    sb.append("_");
    continue;
    }
    sb.append(chs[i]);
    sb.append("_");
    }
    // 若已知字符串的当前字符是一个数字字符
    if (chs[i] >= 48 && chs[i] <= 57) {
    // 且它之后没有后继字符,则简单地将它复制到新字符串中;
    if (i == (chs.length - 1)) {
    sb.append(chs[i]);
    } else if(chs[i]>48) {// 有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中;
    String s;
    int number;
    s = String.valueOf(chs[i]);
    try {
    number = Integer.parseInt(s);
    } catch (Exception e) {
    continue;
    }
    for (int j = 0; j < number; j++) {
    sb.append(chs[i+1]);
    }
    sb.append("_"); }
    }
    }
    return sb;
    } public static void main(String[] args) {
    System.out.println(new Code().encode("24ab_2t2"));
    }}
      

  3.   

    其中chs[i] == 95  "_"的ASCAL码为95
      

  4.   

    答案应该是这样的,这题目太绕了public class Code {
    public String encode(String str) {
    char[] chs = str.toCharArray();
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < chs.length; i++) { // 若已知字符串的当前字符不是大于0的数字字符,则复制该字符于新字符串中;
    if (chs[i] <= 48 || chs[i] > 57) {
    if (chs[i] == '_') {
    sb.append("\\UL");
    } else {
    sb.append(chs[i]);
    }
    sb.append("_");

    }
    // 若已知字符串的当前字符是一个数字字符
    if (chs[i] > 48 && chs[i] <= 57) {
    // 且它之后没有后继字符,则简单地将它复制到新字符串中;
    if (i == (chs.length - 1)) {
    sb.append(chs[i]);
    } else {// 有后继字符,设该数字字符的面值为n,则将它的后继字符(包括后继字符是一个数字字符)重复复制n+1次到新字符串中;
    String count = String.valueOf(chs[i]);
    System.out.println(count);
    int number = Integer.parseInt(count);
    for (int j = 0; j <= number; j++) {
    sb.append(chs[i + 1]);
    }

    }
    sb.append("_");
    } }
    return sb.toString();
    } public static void main(String[] args) { System.out.println(new Code().encode("24ab_2t2"));
    }}