分裂线到数组的单词

时间:2017-03-31 07:39:47

标签: java regex swing split

我找到了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));

给出提示)

2 个答案:

答案 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