/*串操作:
l使用字符串存贮一个英文句子“Java is an object oriented programming language”
。显示该句子,并算出每个单词的字母数和平均字母数,并按单词升序排列输出
l(不用数组,只用串操作)
l命名:学号姓名串操作.rar */
public class c04312039 {
static int num=0; //定义成员变量num和nowindex,num表示句子中
static int nowindex; //包含的单词数,nowindex起到指针的作用,标致着
//该指针当前在句子中的位置,以便取词
public static void main(String a[])
{ String str=new String("Java is an object oriented programming language");
//定义一个字符串实例,并确定内容
System.out.println("字符串的内容是:");
System.out.println(str); //输出该串
System.out.println("---------------------------------");
System.out.println("显示每个单词字母数和平均字母数如下:");
countchnum(str); //算出每个单词字母数和平均字母数
System.out.println("---------------------------------");
System.out.println("按单词升序排列输出句子如下:");
makeorder(str); //按单词升序排列输出句子
System.out.println("---------------------------------");
}
static String getword(String str1,int startindex) //方法,用于从句子中取出单个单词
{ int i; //返回值为具体单词
int j;
for(i=startindex;str1.charAt(i)!=' '&&i<str1.length()-1;i++);
nowindex=i+2; //i为当前单词的结束位置,nowindex指向下一个单词的开始位置
return str1.substring(startindex,nowindex-1); //输出当前单词
}
public static void countchnum(String str1)
{int i;
int j;
int chnum; //记录某个单词的字母数
int avechnum=0; //记录句子中的字母总数,用于计算平均单词数
for(i=0;i<=str1.length()-1;i++) //从句子的每个单词开始循环
{if(i==0||str1.charAt(i-1)==' ') //如果该单词是第一个单词,或它前面有空格
{num++; //则说明它是某单词的开始,单词数num加1
chnum=0;
for(j=i;j<str1.length()&&str1.charAt(j)!=' ';j++) //循环到该单词的结尾
{chnum++;}
System.out.println("第"+num+"个单词的字母数为:"+chnum); //输出该单词的字母数
avechnum+=chnum; //当前总长度增加
}
}
System.out.println("---------------------------------"); //分割线
System.out.println("平均字符数为:"+(float)avechnum/num); //计算平均字母数并输出
}
public static void makeorder(String str1) //类冒泡法按升序输出各个单词
{ String substr1=new String(); //定义字符串1,用于引发比较和存放当前最小的单词
String substr2=new String(); //用于存放另一个用于比较的单词
String substr3=new String("A"); //用于防止重复
int i;
for(i=0;i<num;i++) //有多少个单词就冒泡多少次
{nowindex=1;
substr1="zzzz"; //将它设为最大的单词,使得每个句子中的单词都能参与比较
for(;nowindex<=str1.length();) //判断是不是到达句子的结尾
{substr2=getword(str1,nowindex-1); //取句子中的当前词
if(substr1.compareTo(substr2)>0&&substr2.compareTo(substr3)>0)
substr1=substr2; //如果substr2中的词比substr1中的词小,且没有被输出(即比substr3大)
} //则与substr1换位
System.out.println(substr1); //输出当前剩余词中的最小词
substr3=substr1; //将刚刚输出过的词放入substr3,用于防止输出重复
}
}
}