自己写的这段程序 删除输入字符串中的数字,并且计算期中删除的数字之和 写了下面的代码 计算总错 删除有的字符串对有的错 大家帮忙看一下哪错了public class StringTest1 {    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        String input = sc.next();
        MethodClass mc = new MethodClass();
        System.out.println("删除数字之后的字符串为:");
        mc.StringDelete(input);
        System.out.println('\n');
        System.out.println("删除的数字之和为:"+'\n'+MethodClass.sum);
    }
}class MethodClass {
    static int sum = 0;
    public void StringDelete(String input) {
        StringBuffer strb = new StringBuffer(input);
        for (int i = 0; i < strb.length(); i++) {
            if (strb.charAt(i)>= '0' && strb.charAt(i) <= '9') {
                sum = sum + Integer.parseInt(strb.substring(i, i+1));
                strb.delete(i, i + 1);
            } else {
                System.out.print(strb.substring(i, i + 1));
            }        }
    }
}

解决方案 »

  1.   

    逻辑有错误
    比如你输入
    abc123
    结果应该是6
    但是当你删除了1之后2到了1的位置而不幸的是你的偏移量离开了1所在的位置这样计算肯定不对
    建议先用一个临时变量保存新的字符串。而不是直接删除
    然后再返回这个新的字符串
      

  2.   

    你写的代码中这一句写得不当:strb.delete(i, i + 1);
    因为当你删除一次后,strb的值就变了,也就是长度变了,
    比如我输入如下一个字符串:“a11b22c”
    那么for循环的第2次执行后,字符串的值就变为:“a1b22c”;
    而for循环中的i是一直增长的,你可以重新定义一个字符串,
    用于记录非数字的字符,然后再一次性输出,就OK了。
      

  3.   

    你也可以将:strb.delete(i, i + 1);这一句去掉,就可以了
      

  4.   

    import java.util.Scanner;public class StringTest1
    { public static void main(String args[])
    {
    Scanner sc = new Scanner(System.in);
    String input = sc.next();
    MethodClass mc = new MethodClass();
    System.out.println("删除数字之后的字符串为:");
    System.out.println(mc.StringDelete(input));
    System.out.println("删除的数字之和为:" + '\n' + mc.sum);
    }
    }class MethodClass
    {
    int sum = 0; public String StringDelete(String input)
    {
    StringBuffer sb = new StringBuffer();
    StringBuffer sb1 = new StringBuffer(input); for (int i = 0; i < sb1.length(); i++)
    {
    if (Character.isDigit(input.charAt(i)))// 判断该字符为数字
    {
    sum += Integer.parseInt(sb1.substring(i, i + 1));
    }
    else
    {
    sb.append(input.charAt(i));
    }
    } return sb.toString();
    }}
      

  5.   

    楼主想的太复杂了 呵呵,思路就是,如果是数字就把数字加到sum上,如果不是数字就加到Stringbuffer里
      

  6.   

    改过来了 恩 是有点想复杂了 if else的语句换一下delete删了就好了  
      

  7.   

    import java.sql.Timestamp;
    import java.util.Scanner;public class Test { 
      public static void main(String args[]) {
      System.out.println("请输入字符串:");
      Scanner sc = new Scanner(System.in);
      String input = sc.next();
      
      MethodClass mc = new MethodClass();
      System.out.println("删除数字之后的字符串为:");
      mc.StringDelete(input);
      System.out.println('\n');
      System.out.println("删除的数字之和为:"+'\n'+MethodClass.sum);
      }
    }  class MethodClass {
      static int sum = 0;
      public void StringDelete(String input) 
    {
      StringBuffer tem= new StringBuffer();
      StringBuffer strb = new StringBuffer(input);
      for (int i = 0; i < strb.length(); i++) {
      if (strb.charAt(i)>= '0' && strb.charAt(i) <= '9')
      {
         sum = sum + Integer.parseInt(strb.substring(i, i+1));
         tem=  strb.replace(i, i+1, "-");
      } 
      }
      System.out.println(tem.toString().replaceAll("-", ""));
      
      }
    }
    看看是不是你想要的结果?