托马斯桑斯特ins账号:java 字符处理问题

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/23 19:42:05
import java.util.*;
import java.io.*;
public class ko7_8
{
public static void main(String args[])throws IOException
{
String s;
int n,m;
int ch[]=new int[255];
Arrays.fill(ch,0);
BufferedReader keyin=new BufferedReader(new InputStreamReader(Systen.in));
System.out.println("输入一串字符,然后,计算字符出现的次数.");
System.out.print("输入一串字符:");
s=keyin.readLine();
n=s.length();
System.out.println("输出结果:");
for(m=0;m<n;m++)
ch[s.charAt(m)]++;
for(m=0;m<255;m++)
if(ch[m]>0)
System.out.println((char)m+"--出现"+ch[m]+"次!");
}
}

上面程序的两个循环看不懂(特别是第一个循环)。特向各位大虾们请教。如果使我弄明白了,必定酬谢。
我是想知道里面两个循环的作用。请详细点。谢谢。

首先你必须要知道这个程序是要你输出字符所在的位置以及所在的位置上他的数组所出现的次数大小
thows他是一个方法头异常测试声明,注意他与throw是有区别的,throw是一个异常抛出,这里就是声明,不一定代表有错误了.
Java中,System.in是一个标准的输入函数,只能输入键盘上的字符,而且要知道此时我们得到的字符是个字节流,所以要通过IputStreamReader()这个方法把它转为字符串流.
为了提高速率,我们用 BufferedReader 进行数据过滤,然后借助他的对象 Keyin的readLine( )得到一个字符串.\
所以BufferedReader keyin=new BufferedReader(new InputStreamReader(Systen.in));
相当于建立这样一个对象,s=keyin.readerLine( );可以得到一个字符串;
这个, n.length为求字符串长度,
而第二个循环中的charAt(m)他的意思为返回m位置上的字符,所以
ch[s.charAt(m)]就是得到一个数组的大小,其实此时要用到的是 charAt(m) 这个字符的unidoe码,这个就是数组规定它必须是个常.而字符大小也是0到255,正好可以对上他的他的数组下标,如果有重复出现的字符的话,那么该坐标的字符数组必然会加一.我感觉就是这个意思,希望你可以理解.

ch[s.charAt(m)]++;
charAt(int m)返回的是char,这个功能你应该能看懂,放在循环内是要把字符串s逐个提取出来。数组ch[]需要的是一个整数型的下标,所以将返回的char转换为对应的整数,(注:ch[]下标只能为整数或字符,是字符串都不行。)比如说输入的第一个字符是 a ,那麼字符转换为整数后为97,那麼就是这样子了:ch[97]++,第二个字符如果是b,那麼就是ch[98]++,第三个字符如果又是a,那麼ch[97]++,说到这里你应该明白了吧。
第二个循环不用说你也应该明白了。如果不明白发邮件(arnold.wu@ld.act-cn.com)给我,我再给你解答,