当前位置: 首页 > 知识库问答 >
问题:

在java-BufferedReader行为中计算字符串中的行数

夹谷岳
2023-03-14
package test;

import java.io.BufferedReader;
import java.io.StringReader;

public class LineCountTest {

    private static final String test = "This is a\ntest string\n\n\n";
    private static final String test2 = "This is a\ntest string\n\n\n ";

    public static void main(String[] args) {
        System.out.println("Line count: " + countLines(test));
        System.out.println("Line count: " + countLines(test2));
    }

    private static int countLines(String s) {
        try (
                StringReader sr = new StringReader(s);
                BufferedReader br = new BufferedReader(sr)
        ) {
            int count = 0;
            for (String line = br.readLine(); line != null; line = br.readLine()) {
                count++;
            }
            return count;
        } catch (Exception e) {
            return -1;
        }
    }

}
String[] lines = s.split("\n", -1);
int count = lines.length;

会给我正确的/预期的行数。我只问性能方面的原因,以及是否有人能判断BufferedReader的行为是否正确。

共有1个答案

孔飞翔
2023-03-14

因此,您发现,当最后一行以\n结尾或非空时,可以识别它。

出于您的目的,可以使用:

String[] lines = "This is a\ntest string\n\n\n".split("\r?\n", 5);

这保证数组将有5个元素。不过,Regex split有点慢。

 类似资料:
  • 问题内容: 需要一些紧凑的代码来计算Java中字符串的行数。该字符串用或分隔。这些换行符的每个实例将被视为一个单独的行。例如 - 应该返回4。原型是 有人可以提供一组紧凑的陈述吗?我想在这里有一个解决方案,但是它太长了。谢谢。 问题答案:

  • 问题内容: 我有一个类似下面的字符串行: A:B:C:D:E:F:G:H:I:J:K:L:M 这意味着定界符(:)的计数为12。这行是有效的。 现在假设您有以下一行: A:B:C:D:E:F:G:H ::::: 这行也是有效的,因为它包含12个定界符。其中存在8个值,而4个值为空白。 现在,以下行应该无效: A:B:C:D:E:F:-无效-因为它仅包含6个值,但预期为12个。 这该怎么做 .. ?

  • 有什么方法可以通过计算/执行字符串来动态检查和设置AnyLogic中代理的参数吗? 我的案子: 我有编号为0到200的停车场,命名为parkingLot0、parkingLot1、...、parkingLot200(每个容量为1)。 我有一个名为DetachedTrailer的代理。 我想为到达的分离拖车找到一个空的停车位,并设置代理。停到那个停车场。 我不想一个接一个地手动执行此操作,而是希望有

  • 我正在学习如何通过OCA考试,并坚持这个java字符串池的概念。 考虑以下几点: 和在字符串中是相同的,在对象中也是相同的,因为它是相同的字符串文本,所以JVM在编译时将字符串池和。 现在,是在运行时计算的,因此应该返回一个新字符串。因此,应该为false,但事实并非如此。为什么? 我的一个理论是方法首先检查是否有空白需要删除,如果没有,则简单返回本身。这可以解释为什么s1==s3,但我不确定。

  • 问题内容: 我正在做一个作业,在该作业中,我必须编写程序以读取用户的字符串,并打印出字符串中出现次数的字母。 例如,“ Hello world”应该打印出“ h = 1 e = 1 l = 3 o = 2 …等”,但是我只写“ hello world”和字母总数。 我不能使用hashmap函数,只能使用数组。有人可以给我一两个提示,提示如何从下面的书面代码继续进行操作以获得我的首选功能?我不完全了

  • 问题内容: 我需要计算一个字符在一个字符串中出现的次数。 例如,假设我的字符串包含: 我想找到逗号字符的数量,即3。以及沿逗号分割后的各个字符串的数量,即4。 我还需要验证每个字符串,即str1或str2或str3或str4不应超过15个字符。 问题答案: 我已经更新了这个答案。我喜欢更好地使用比赛的想法,但是比较慢: 如果您事先知道要搜索的内容,则使用正则表达式文字;如果不知道,则可以使用构造函