我找到了txt.file中最长和最短的单词。 但我总是拿结果
File Path: there it's ok.
The longest word: *empty*
The shortest word: *empty*
Task complete...
代码:
List<String> lines = Files.readAllLines(Paths.get(fileName), StandardCharsets.UTF_8);
String max = "", min = "BlaBlaBlaBlaBlaBlaBla";
// We take a single line
for(String line: lines){
// Break the next line through the regular to an array of words
List<String> words = Arrays.asList(line.split("\\P{Punct}\\P{Space}"));
String tempMax = Collections.max(words);
max = max.length() < tempMax.length() ? tempMax : max;
String tempMin = Collections.min(words);
min = min.length() > tempMin.length() ? tempMin : min;
}
textArea.setText(String.format(
"File Path: %s\n" +
"The longest word: %s\n" +
"The shortest word: %s\n" +
"Task complete...", fileName, max, min));
给出提示)
答案 0 :(得分:2)
问题似乎在这里:
String tempMax = Collections.max(words);
Collections.max
会返回给定集合的最大元素。
对于List<String>
最大元素,会在列表中为您提供按字母顺序的最后一个字。
例如,在此列表中:
new String[] {"food", "zz", "abcdef", "zoo"}
它会找到"zz"
作为最大元素。
此外,用于拆分“\\P{Punct}\\P{Space}
”的正则表达式不正确。
\\P{Punct}\\P{Space}
表示非标点字,后跟空格。您的问题下面有一些非常有用的评论,建议正确的分割方式。
至少使用:[\\p{P}\\P{ZS}]+
进行拆分。
答案 1 :(得分:0)
使用的正则表达式模式不正确,也使用Comparator获取结果
Steps