文件中以26个字母开头单词的个数?
public void test() {
FileReader fileReader = null;
BufferedReader bufferedReader = null;
int count = 0;
try {
//创建文件输入流
fileReader = new FileReader("story.txt");
//创建文件缓冲流
bufferedReader = new BufferedReader(fileReader);
String str;
//定义count记录个数
count[] = 0;
//循环每次读取一行
while ((str = bufferedReader.readLine()) != null){
char[] chars = str.toCharArray();
//循环判断每一行中的个数
for (int i = 0; i < chars.length; i++) {
if(chars[i]==32&& chars[i]==65){
count++;
}
}
}
System.out.println("数字一共有:" + count + "个");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(bufferedReader != null){
bufferedReader.close();
}
if(fileReader != null){
fileReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
(1)count[] =0 改为 count = 0
(2)每行判断单词个数的逻辑不对,我给你单独封装了一个函数,并添加了2个辅助函数,一个用来判断字符是否是26个英文字母,一个用来判断是否是单词分隔符,单词分隔符我按照逗号、空格、点、回车符、tab键,叹号、问号这几个来处理的,你可以根据你的需要自动调整,也可以只用空格符。
运行结果:
代码(我把函数放在类里里,并在main函数中调用test()函数,你只提取需要的函数部分即可):
public static boolean IsChar(char c){
//判断字符是否是26个英文字母
if( (c >='a' && c<='z') || (c>='A' && c<='Z') )
return true;
else
return false;
}
public static boolean IsJudgeChar(char c){
//判断是否是单词分隔符,这里用 空格,逗号,点,回车符,tab键,问号作为单词的分隔符,可根据实际情况调整,也可以只用空格作为单词分隔符
if( c==',' || c=='.' || c==' ' || c=='\n' || c=='!' || c=='?' || c=='\t')
return true;
else
return false;
}
public static int CaculateLine(String str){
//统计每行中以26个字母开头的单词
int count = 0;
char[] chars = str.toCharArray();
int i = 0;
boolean flag = false;
for(i=0;i<str.length();i++){
if(flag == true){ //开始统计单词
if( IsChar(chars[i]) )
continue;
else if ( IsJudgeChar(chars[i]) ){
count++; //单词数+1
flag = false; //重新开始判断
}else{
//如果是其它字符,比如数字等等,说明不是纯单词,忽略,继续下次判断
flag = false;
}
}else{
if(i==0 && IsChar(chars[i])) //第一个单词,并且第一个单词是26个英文字母之一
flag = true;
else if(i>0 && IsJudgeChar(chars[i-1]) && IsChar(chars[i])) //不是第一个单词,前一个字符是单词分隔符,且当前字符是26个字母之一
flag = true;
}
}
//如果最后一个字符是26个英文字母,需要+1
if( IsChar(chars[str.length()-1]) )
count++;
return count;
}
public static void test() {
FileReader fileReader = null;
BufferedReader bufferedReader = null;
int count = 0;
try {
//创建文件输入流
fileReader = new FileReader("story.txt");
//创建文件缓冲流
bufferedReader = new BufferedReader(fileReader);
String str;
//定义count记录个数
count = 0;//修改 count[] = 0;
//循环每次读取一行
while ((str = bufferedReader.readLine()) != null){
count += CaculateLine(str);
}
System.out.println("数字一共有:" + count + "个");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(bufferedReader != null){
bufferedReader.close();
}
if(fileReader != null){
fileReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
遇到啥问题了啊?扔个代码......
if(chars[i]==32&& chars[i]==65){ 你这条件,谁也无法满足的啊,同时要等于32和65啊?
应该判断前面一个是空格,后面一个是字符的情况吧
for (int i = 0; i < chars.length-1; i++) {
if(chars[i]==32&& ((chars[i+1] >='A' && chars[i+1]<='Z') || (chars[i+1] >='a' && chars[i+1]<='z') ){
count++;
}
}
计算26个字母开头的单词数,就不用循环判断了。又不是统计字符数。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class demo{
public static void main(String[]args) {
}
public void test() {
FileReader fileReader = null;
BufferedReader bufferedReader = null;
int count = 0;
try {
//创建文件输入流
fileReader = new FileReader("story.txt");
//创建文件缓冲流
bufferedReader = new BufferedReader(fileReader);
String str;
//定义count记录个数
count= 0;
//循环每次读取一行
while ((str = bufferedReader.readLine()) != null){
char[] chars = str.toCharArray();
//循环判断每一行中的个数
if((chars[0]>='a'|| chars[0]<='z') || (chars[0]>='A'|| chars[0]<='Z')){
count++;
}
}
System.out.println("数字一共有:" + count + "个");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(bufferedReader != null){
bufferedReader.close();
}
if(fileReader != null){
fileReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!