用java写一个程序,读入一系列由只包含一行的行终止的行。 '#'通过计算空格数,输出每行的字数。不要输出包含#的行的结果(提示使用for-counter控制的循环
时间: 2024-10-09 17:11:30 浏览: 25
当然可以,下面是一个简单的Java程序示例,它会完成你所描述的任务:
```java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class CountWords {
public static void main(String[] args) {
try (BufferedReader br = new BufferedReader(new FileReader("input.txt"))) { // 假设输入文件名为"input.txt"
String line;
int counter = 0; // 初始化计数器
while ((line = br.readLine()) != null) {
if (!line.contains("#")) { // 检查是否包含#
int wordCount = countSpaces(line); // 计算不含#的行的单词数
System.out.println("行 " + (counter+1) + ": 字数 " + wordCount);
counter++;
}
}
} catch (IOException e) {
System.err.println("读取文件时发生错误:" + e.getMessage());
}
}
/**
* 通过计算字符串中连续空格的数量来间接得到单词数,因为英文单词之间通常只有一个空格
*/
private static int countSpaces(String str) {
int spaceCount = 0;
for (char c : str.toCharArray()) {
if (c == ' ') {
spaceCount++;
} else {
spaceCount = 0; // 如果遇到非空格字符,重置计数
}
if (spaceCount > 1) break; // 只需检查一次连续的多个空格,即认为该串有这么多单词
}
return spaceCount + 1; // 加1是因为最后的非空格字符也算作一个单词
}
}
```
这个程序首先打开一个文件,然后逐行读取。对于每一行,如果发现有'#'字符,则跳过;否则,它会计算行中的实际单词数并打印出来。
运行此程序之前,请确保将`input.txt`替换为你实际存放数据的文件路径。
阅读全文