如何从计数中排除空格

  • 本文关键字:排除 空格 java
  • 更新时间 :
  • 英文 :


我必须计算文件"test.txt"中有多少个字母(字符(。我把它记下来了,但它也包括空间,我不想包括。关于如何做到这一点的任何建议?非常感谢。

import java.io.*;
class EnglishAnalysis
{
    public static void main(String[] args)
    {
        try
        {
            FileReader fr = new FileReader("test.txt");
            BufferedReader br = new BufferedReader(fr);
            int count = 0;
            String lineCharacters [];
            String line;
            line = br.readLine();
            while (line != null)
            {
                 lineCharacters = line.split("");
                 for (int i = 0; i < lineCharacters.length; i++)
                 {
                     count ++;
                     line = br.readLine();
                 }
                 System.out.println(count);
             }
             br.close();
        }
        catch (IOException e) {}
    }
}

或者 (Java 8+( 您可以使用 lines()chars() 方法非常轻松地做到这一点:

BufferedReader br = new BufferedReader(fr);
long count = br.lines().flatMapToInt(e -> e.codePoints()).filter(e -> !Character.isWhiteSpace(e)).count();

这将占用文件的行Stream<String>,将它们平面映射到带有String::codePoints字符的字符,过滤掉任何空格,然后计算元素

也许我错过了一些东西,但我不明白拆分有什么好处。 我会这样做:

public static void main(String[] args) {
    try {
        FileReader fr = new FileReader("/tmp/test.txt");
        BufferedReader br = new BufferedReader(fr);
        int count = 0;
        String line;
        line = br.readLine();
        while (line != null) {
            for (int i = 0; i < line.length(); i++)
                if (!Character.isWhitespace(line.charAt(i)))
                    count++;
            line = br.readLine();
        }
        br.close();
        System.out.println(count);
    } catch (IOException ex) {
        System.out.println(ex);
    }
}

具体来说,我认为根本不需要修改输入,通过调用拆分、制作额外的副本、进行查找/替换等。 这一切都需要额外的时间和空间。

实际上,我认为没有任何理由费心处理行中的文件:

public static void main(String[] args) {
    try {
        FileReader fr = new FileReader("/tmp/test.txt");
        BufferedReader br = new BufferedReader(fr);
        int count = 0;
        while (true) {
            int c = br.read();
            if (c < 0)
                break;
            if (!Character.isWhitespace(c))
                count++;
        }
        br.close();
        System.out.println(count);
    } catch (IOException ex) {
        System.out.println(ex);
    }
}

使用 BufferedReader 本身可以提高不逐个字符读取文件的效率。 因此,您可以通过这样做来保存每行的额外副本。

为什么不从所有空格中清除每行后为每行添加字符数:

    while (line != null) {
        count += line.replaceAll("\s+", "").length();
        line = br.readLine();
    }

字符类有一个"isWhiteSpace(("方法

java.lang.Character.isWhitespace(char ch(

while (line != null)
  {
    for (int i = 0; i < line.length(); i++)
    {
      if (!Character.isWhitespace(line.charAt(i)))
         count ++;
      line = br.readLine();
    }
    System.out.println(count);
  }

为什么不在进行拆分和计数之前从字符串中删除空格?

一种方法是使用正则表达式:

while (line != null)
{
  line.replaceAll("\s+","");
  lineCharacters = line.split("");
  ...
}

最新更新