我正在练习编写一个程序,该程序从用户处获取文本文件,并在文本中提供字符,单词和行等数据。
我搜索并查看了相同的主题,但无法找到让代码运行的方法。
public class Document{
private Scanner sc;
// Sets users input to a file name
public Document(String documentName) throws FileNotFoundException {
File inputFile = new File(documentName);
try {
sc = new Scanner(inputFile);
} catch (IOException exception) {
System.out.println("File does not exists");
}
}
public int getChar() {
int Char= 0;
while (sc.hasNextLine()) {
String line = sc.nextLine();
Char += line.length() + 1;
}
return Char;
}
// Gets the number of words in a text
public int getWords() {
int Words = 0;
while (sc.hasNext()) {
String line = sc.next();
Words += new StringTokenizer(line, " ,").countTokens();
}
return Words;
}
public int getLines() {
int Lines= 0;
while (sc.hasNextLine()) {
Lines++;
}
return Lines;
}
}
主要方法:
public class Main {
public static void main(String[] args) throws FileNotFoundException {
DocStats doc = new DocStats("someText.txt");
// outputs 1451, should be 1450
System.out.println("Number of characters: "
+ doc.getChar());
// outputs 0, should be 257
System.out.println("Number of words: " + doc.getWords());
// outputs 0, should be 49
System.out.println("Number of lines: " + doc.getLines());
}
}
我确切地知道为什么我得到1451而不是1451.原因是因为我没有' \ n'在最后一句结尾但我的方法补充说 numChars + = line.length()+ 1;
然而,我找不到解决为什么我得到0的单词和行。 *我的文本包含以下内容: , - '
毕竟,有人能帮助我做这项工作吗?
**到目前为止,我担心的问题是,如果最后一句话没有' \ n'元件。我有机会用if语句解决这个问题吗?
- 谢谢你!
答案 0 :(得分:2)
在getChar/Words/Lines
之后,您已到达文件末尾。所以在这个文件中没有其他内容了!
您应该使用public int getChar() {
sc = new Scanner(inputFile);
...
// solving your problem with the last '\n'
while (sc.hasNextLine()) {
String line = sc.nextLine();
if (sc.hasNextLine())
Char += line.length() + 1;
else
Char += line.length();
}
return char;
}
方法重置扫描仪,例如:
\n
请注意,行结尾并不总是\r\n
!它也可能是public int getWords() {
sc = new Scanner(inputFile);
...
public int getLines() {
sc = new Scanner(inputFile);
...
(特别是在windows下)!
{{1}}
答案 1 :(得分:1)
我会使用一次扫描来计算所有3个,具有不同的计数器。只是在每个char上循环,检查它是否是一个新单词等,增加计数,使用Charater.isWhiteSpace *
DifferenceMain()