为了账号安全,请及时绑定邮箱和手机立即绑定

如何从计数中排除空格?

如何从计数中排除空格?

慕的地6264312 2022-09-14 17:43:48
我必须计算文件“测试.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) {}    }}
查看完整描述

5 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

或者(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


查看完整回答
反对 回复 2022-09-14
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

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


    while (line != null) {

        count += line.replaceAll("\\s+", "").length();

        line = br.readLine();

    }


查看完整回答
反对 回复 2022-09-14
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

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


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);

    }

}

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


实际上,我看不出有任何理由打扰按行处理文件:


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);

    }

}

使用缓冲读取器本身可以让您有效地不逐个字符读取文件。因此,通过这种方式可以保存每行的额外副本。


查看完整回答
反对 回复 2022-09-14
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

字符类具有“是白色空间()”方法


java.lang.Character.isWhitespace(字符 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);

  }


查看完整回答
反对 回复 2022-09-14
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

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


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


while (line != null)

{

  line.replaceAll("\\s+","");

  lineCharacters = line.split("");

  ...

}


查看完整回答
反对 回复 2022-09-14
  • 5 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信