输入/输出空白

问题描述 投票:-1回答:1

在这段代码中,我从文件中获取所有单词并计数。之后,将它们及其频率写入文件中。

此代码正在执行我想做的事情,但是另外,它还会计算所有空格并将它们写入文件。我怎么不包括它们?

            String line;

            BigDecimal count = new BigDecimal(0);

            ArrayList<String> words = new ArrayList<String>();

            Pattern pattern = Pattern.compile("[^a-zA-Z]", Pattern.CASE_INSENSITIVE);

            while ((line = reader.readLine()) != null) {

                String string1 = line.toLowerCase();

                String string[] = pattern.split(string1);
                for (String s : string) {
                    words.add(s);
                }
            }
            Map<String, BigDecimal> map = new HashMap<String, BigDecimal>();

            for (String s : words) {
                BigDecimal x = new BigDecimal(1);
                if (map.containsKey(s)) { 
                    count = map.get(s);
                    map.put(s, count.add(x));
                } else if (!map.containsKey(s)) {
                    map.put(s, x);

                }
            }

            Map<String, BigDecimal> wordHistogram = map;

            List<Entry<String, BigDecimal>> sortedWordHistogram = new LinkedList<Entry<String, BigDecimal>>(
                    wordHistogram.entrySet());
            Collections.sort(sortedWordHistogram, (o1, o2) -> o2.getValue().compareTo(o1.getValue()));


            Map<String, BigDecimal> inTxt = map;

            for (Entry<String, BigDecimal> entry : sortedWordHistogram) {
                inTxt.put(entry.getKey(), entry.getValue());
                writer.write(entry.getKey() + " : " + entry.getValue() + "\n");
            }

我相信它足够有效率,但为使它更好或更有效而进行的任何调整都是令人高兴的。

java input output
1个回答
1
投票

只需用[^a-zA-Z]替换您的正则表达式(\\s+)。>>

这将确保在分隔行时,考虑单词之间的所有空格。

此外,您可以通过替换以下行来进一步简化代码:

Pattern pattern = Pattern.compile("[^a-zA-Z]", Pattern.CASE_INSENSITIVE);

while ((line = reader.readLine()) != null) {

    String string1 = line.toLowerCase();

    String string[] = pattern.split(string1);
    for (String s : string) {
        words.add(s);
    }
}

with

while ((line = reader.readLine()) != null) {
    String string[] = line.trim().toLowerCase().split("\\s+");
    for (String s : string) {
        words.add(s);
    }
}

注意,我还另外使用了trim(),以便在分割前从行中删除开头和结尾的空白字符。

© www.soinside.com 2019 - 2024. All rights reserved.