JAVA:我必须编写一个程序从文件中读取“句子”,然后计算每个句子的单词和元音数
我正在做一个项目,我想创建一个文件,让用户输入“句子”,从中阅读这些句子,然后找出每个句子中单词和元音的数量。 然后我计划以这种方式展示它们: 预期输出:忽略点,它们只是用来显示空间的 句子。。。。。。。。。字数。。。。。。元音数 第1句……x…………y 电流输出 我得到一个输出,其中元音和单词的数量是之前和当前元音和单词数量的总和 示例:如果第一个句子有两个元音和两个单词,甚至第二个句子也有相同数量的元音和单词,那么输出将是: 句子字数。。。。。。元音数 第1句……第2句……第2句 第2句………4………4 所以我的问题是: 由于某些原因,我无法以我想要的方式打印,即获取每个句子的元音和单词数,您能帮我纠正我的程序吗 这是我的密码:JAVA:我必须编写一个程序从文件中读取“句子”,然后计算每个句子的单词和元音数,java,stringtokenizer,Java,Stringtokenizer,我正在做一个项目,我想创建一个文件,让用户输入“句子”,从中阅读这些句子,然后找出每个句子中单词和元音的数量。 然后我计划以这种方式展示它们: 预期输出:忽略点,它们只是用来显示空间的 句子。。。。。。。。。字数。。。。。。元音数 第1句……x…………y 电流输出 我得到一个输出,其中元音和单词的数量是之前和当前元音和单词数量的总和 示例:如果第一个句子有两个元音和两个单词,甚至第二个句子也有相同数量的元音和单词,那么输出将是: 句子字数。。。。。。元音数 第1句……第2句……第2句 第2句……
import java.io.*;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;
class asgn5_3
{
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main (String args[])throws IOException
{
System.out.println("Enter the number of sentences to be inputted");
int sencounter=Integer.parseInt(br.readLine());
String sentence="";
int j = 0;//counter
try//writing sentences to file
{
FileWriter fw=new FileWriter("c:\\users\\abc\\desktop\\TEXT.txt");
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
for (j=1;j<=sencounter;j++)
{
System.out.println("Enter your sentence:");
sentence=br.readLine();
pw.println(sentence);
}
pw.close();
bw.close();
fw.close();
}
catch(IOException e)
{
System.out.println(e);
}
FileReader fr = new FileReader("c:\\users\\abc\\desktop\\TEXT.txt");//reading from a file
BufferedReader sb = new BufferedReader (fr);
String text;
int i =0;//counter
int numberofwords=0;
int vowels=0;
char ch;
System.out.print("Sentence");
System.out.print(" Number of words");
System.out.println(" Number of vowels");
while((text=sb.readLine())!=null)//counting words
{
StringTokenizer words = new StringTokenizer(text);
numberofwords=numberofwords+words.countTokens();
for (i=0;i<sentence.length();i++)//counting vowels
{
ch=sentence.charAt(i);
if (ch=='a'||ch == 'A' || ch == 'e' || ch == 'E' || ch == 'i' || ch == 'I' || ch == 'o' || ch == 'O' || ch == 'u' || ch == 'U')
{
vowels++;
}
}
System.out.print(sentence);
System.out.print(" "+numberofwords);
System.out.println(" "+vowels);
}
}
}
两个问题:
您使用的是最后一个用户输入的句子,而您应该使用从文件中读取的文本,如下所示:
StringTokenizer words = new StringTokenizer(text);
numberofwords=numberofwords+words.countTokens();
for (i=0;i<text.length();i++)
{
ch=text.charAt(i);
if (ch=='a'||ch == 'A' || ch == 'e' || ch == 'E' || ch == 'i' || ch == 'I' || ch == 'o' || ch == 'O' || ch == 'u' || ch == 'U')
{
vowels++;
}
}
System.out.print(text);
您继续重复使用计数,因此获得累积总和,以避免在读取文件中的每一行时重置计数器,如下所示:
元音=0;
numberofwords=0
因此,在所有代码中,您应该:
while((text=sb.readLine())!=null)//counting words
{
vowels = 0;
numberofwords = 0;
StringTokenizer words = new StringTokenizer(text);
numberofwords=numberofwords+words.countTokens();
for (i=0;i<text.length();i++)
{
ch=text.charAt(i);
if (ch=='a'||ch == 'A' || ch == 'e' || ch == 'E' || ch == 'i' || ch == 'I' || ch == 'o' || ch == 'O' || ch == 'u' || ch == 'U')
{
vowels++;
}
}
System.out.print(text);
System.out.print(" "+numberofwords);
System.out.println(" "+vowels);
}
好的,那么你的问题是什么?我无法以我想要的方式打印,我也无法找出我的程序中存在的问题。那么,预期输出是什么,实际输出是什么?准确点。使用代码格式显示两种输出的示例。是否有任何原因,为什么要将语句写入文件,然后再次读取它们?如何:System.out.PrintLnStation++numberofwords++元音?