package src;import java.util.Scanner; 
import java.io.*;public class test { private BufferedReader bf = null;
private String str = ""; // 录入
public void luruwenzi() {
System.out.println("\t\t请输入一行字符包含英文字母、空格、数字、文字");
try {
bf = new BufferedReader(new InputStreamReader(System.in));
str = bf.readLine();
} catch (Exception e1) {
e1.printStackTrace();
} } // 行号和分行
public void hanghao() { System.out.print("第1行:\t");
int x = 1, e = 1;
for (int i = 0; i < str.length(); i++) {
char aa = str.charAt(i);
System.out.print(aa);
if (x > 80) {
System.out.println();
e++;
System.out.print("第" + e + "行:\t");
x = 0;
}
x++;
}
System.out.println("\n");
} // 统计
public void xinxitongji() {
int English = 0, space = 0, number = 0, wenzi = 0;// 定义
for (int i = 0; i < str.length(); i++) { char temp = str.charAt(i);
if ((temp >= 'a' && temp < 'z') || (temp >= 'A' && temp <= 'Z'))// 判断字母
English++;
else if (temp >= '0' && temp <= '9')// 判断数字
number++;
else if ((int) temp == 32)// 判断空格
space++;
else
// 其他的就是文字 wenzi++; } System.out.println("英文字母的个数为:" + English);
System.out.println("数字的个数为:" + number);
System.out.println("空格的个数为:" + space);
System.out.println("文字的个数为" + wenzi);
System.out.println("全部个数:" + str.length()); } // 删除
public void shanchu() throws IOException {
System.out.println("请输入要删除的字符");
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader d = new BufferedReader(in);
String q = d.readLine();
String s = str;
String a = s.replace(q, "");
System.out.println("删除后:" + a);
//删除后再排
System.out.print("第1行:\t");
int x = 1, e = 1;
for (int i = 0; i < a.length(); i++) {
char aa = a.charAt(i);
System.out.print(aa);
if (x > 80) {
System.out.println();
e++;
System.out.print("第" + e + "行:\t");
x = 0;
}
x++;
}
int English = 0, space = 0, number = 0, wenzi = 0;// 定义
for (int i = 0; i < a.length(); i++) { char temp = a.charAt(i);
if ((temp >= 'a' && temp < 'z') || (temp >= 'A' && temp <= 'Z'))// 判断字母
English++;
else if (temp >= '0' && temp <= '9')// 判断数字
number++;
else if ((int) temp == 32)// 判断空格
space++;
else
// 其他的就是文字 wenzi++;
}
}
// 退出
public void tuichu() { System.exit(0);
} public static void main(String args[]) throws IOException { System.out.println("\t\t*********字数统计器********");
Scanner in = new Scanner(System.in);
test nd = new test();
int q;
do {
System.out.println("\t\t\t1.录入文字");
System.out.println("\t\t\t2.统计信息");
System.out.println("\t\t\t3.删除字符串");
System.out.println("\t\t\t4.退出");
System.out.println("\t\t*******请选择1-4*******"); q = in.nextInt();
switch (q) { case 1: {
nd.luruwenzi();
nd.hanghao();
break;
}
case 2: {
nd.xinxitongji();
break;
}
case 3: {
nd.shanchu();
break;
}
case 4: {
System.out.println("\t\t**********谢谢你的使用!*******");
break;
}
default: {
System.out.println("\t\t输入错误,必须输入1-4之间的数,请看清楚!!");
break;
}
}
} while (q != 4);
}
}
为什么我这个代码统计了删除前的字数了,然后删除后再统计还是统计出删除前的字符个数, 我知道我前面那个统计接收的是没删除前的字符  但是我要怎么改才能让程序继续统计删除后的字符个数?   高手指点下

解决方案 »

  1.   

    case 2: {
    nd.xinxitongji();
    break;
    } 每次统计信息的来源都是这个信息 都是用的str那能不一样吗 建议你把在删除后改变str的值就没问题了
    public void shanchu() throws IOException {
    System.out.println("请输入要删除的字符");
    InputStreamReader in = new InputStreamReader(System.in);
    BufferedReader d = new BufferedReader(in);
    String q = d.readLine();
    str = str.reaplaceAll(q,"");System.out.println("删除后:" + str);
    //删除后再排 
    下面的都不要了  要不你就把Enligh,space等统计个数的 作为全局变量 在修改
      

  2.   

    错误在删除方法中:
    String s = str;
    String a = s.replace(q, "");
    System.out.println("删除后:" + a);
    这里你把删除后的值赋给的是局部变量 a,后面也没有要对统计用的全局变量str进行处理,所以会有问题。如果你想在你现在程序的基础上改,那就把删除方法里面的a变量全用str代替,
    不提倡这种方法,因为你这段代码还是写的有点乱,建议你重构一下