大家好,我正在写一种计算文件中单词数量的方法,但是显然代码中的某个地方有错误,该方法不起作用。这是我的代码:
public class Main2 {
public static void main(String[] args) {
count("/home/bruno/Desktop/WAR_JEE_S_09_Podstawy/MojPlik");
}
static int count(String fileName){
Path path = Paths.get(fileName);
int ilosc = 0;
String wyjscie = "";
try {
for (String charakter : Files.readAllLines(path)){
wyjscie += charakter;
}
StringTokenizer token = new StringTokenizer(wyjscie," \n");
} catch (IOException e) {
e.printStackTrace();
}
return ilosc;
}
}
文件路径正确,这里是文件内容
test test
test
test
在我调用main方法后,它什么也不显示。错误在哪里?
答案 0 :(得分:1)
您的代码将在文件中记录行……如果您遵循该思想,那么会很好。
现在您的代码就是简单地读取行,将它们放入一个大字符串中,然后对该操作的结果不执行。您只有一个int计数器...的init's设置为0,然后不使用或增加就返回!并且除非我弄错了,否则<html>
<body>
<h3>Hello world</h3>
<script type="text/javascript">
var h3 = document.querySelector('h3');
var r = document.createRange();
r.selectNode(h3);
window.getSelection().addRange(r);
document.execCommand("copy");
</script>
</body>
</html>
会自动最后删除换行符,因此,总的来说,您的代码不过是没用的。
要计算个单词,您必须占用每一行,并(例如)分割该单行字符串作为空格。这会给您一个数字。然后将这些数字加起来。
长话短说:真正的答案是您应该退后一步。假设这将神奇地解决问题,请不要仅仅编写代码。取而代之的是:首先想想一个可以解决问题的策略(算法)。用纸和笔写下算法思想。然后“手动”对一些样本数据运行算法。然后,最后将算法转换为代码。答案 1 :(得分:1)
此外,除了您什么都不输出之外,逻辑背后还有一些小错误。我在这里和那里做了一些更改,以使您的代码正常工作。
s.trim()
删除所有前导和训练空格,trimmed.split("\\s+")
将字符串拆分为任何空白字符,包括空格。
static int count(String fileName) throws IOException {
Path path = Paths.get(fileName);
int count = 0;
List<String> lines = Files.readAllLines(path);
for (String s : lines) {
String trimmed = s.trim();
count += trimmed.isEmpty() ? 0 : trimmed.split("\\s+").length;
}
return count;
}
答案 2 :(得分:0)
这是使用Java 8中的函数式编程的代码。这也是使用Stream
的{{1}}的常见示例-可用于计数或打印文件中的单词。< / p>
flatMap
请注意,long n = Files.lines(Paths.get("test.txt"))
.flatMap(s -> Stream.of(s.split("\\s+")))
.count();
System.out.println("No. of words: " + n);
返回一个Files.lines(Path)
,其中包含来自输入文件的行。此方法类似于Stream<String>
,但是返回流而不是readAllLines
。