自己写的这段程序 删除输入字符串中的数字,并且计算期中删除的数字之和 写了下面的代码 计算总错 删除有的字符串对有的错 大家帮忙看一下哪错了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));
} }
}
}
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));
} }
}
}
比如你输入
abc123
结果应该是6
但是当你删除了1之后2到了1的位置而不幸的是你的偏移量离开了1所在的位置这样计算肯定不对
建议先用一个临时变量保存新的字符串。而不是直接删除
然后再返回这个新的字符串
因为当你删除一次后,strb的值就变了,也就是长度变了,
比如我输入如下一个字符串:“a11b22c”
那么for循环的第2次执行后,字符串的值就变为:“a1b22c”;
而for循环中的i是一直增长的,你可以重新定义一个字符串,
用于记录非数字的字符,然后再一次性输出,就OK了。
{ 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();
}}
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("-", ""));
}
}
看看是不是你想要的结果?