【问题标题】:Giving a wrong count for a data read from a file对从文件中读取的数据进行错误计数
【发布时间】:2014-08-20 01:56:00
【问题描述】:

我正在尝试从文件中读取和写入一些数据,并使用 split() 方法从写入的数据中计算非常简单的特征,例如空格数等。这是我尝试过的。

    File file=new File("G:\\AAA.txt");

    FileWriter fw=new FileWriter(file);

    fw.write("AAAAAAAA");

    fw.flush();
    fw.close();

    FileReader fr=new FileReader(file);

    String spaces="\\s";

    BufferedReader br=new BufferedReader(fr);

    String data=br.readLine();
    System.out.println(data);

    String[] tokenize=data.split(spaces);
    System.out.println(tokenize.length);

我的问题是,如果没有空格,我得到的答案是 1,尽管它必须是 0。当我得到 1 个空格时,它打印为 2。从给定的空格中,答案总是大于 1。

谁能解释一下我没有得到确切答案的原因。

【问题讨论】:

    标签: java filereader filewriter


    【解决方案1】:

    来自String.split的docs

    如果表达式与输入的任何部分都不匹配,则结果数组只有一个元素,即这个字符串。

    所以没有空格,会返回原始字符串,因此长度为1。

    如果您有一个空格,例如“AAA AAA”,则数组将包含两个元素“AAA”和“AAA”。所以长度总是比令牌的数量大一。

    【讨论】:

    • 您好杰夫,感谢您的回复。 K 我明白你说的。但是,如果我的“AAA AAA”中间有两个空格,我如何得到 3 的答案?它计算空格的数量对吗?那么计算大字符串的特征是一种好方法吗?为了得到准确的答案,我是否总是需要从答案 o.O.. 中减去 1?
    • "AAA AAA".split("\\s") 将返回一个长度为 3 的数组。ideone.com/Az8EXX
    • 试试 Apache 的 countMatches commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/…, java.lang.String)
    【解决方案2】:

    如果没有空格,为什么要一个

    如果split(#regex)中没有匹配的字符串,则将输入字符串返回到字符串数组中。

    如果空格总是不止一个

    它将按空格分割字符串,因此前半部分和后半部分将在数组中。所以长度大于一。

    查找空间计数

    Pattern pattern = Pattern.compile("\\s");
    
    Matcher matcher = pattern.matcher("AA   A");
    
    int count = 0;
    while (matcher.find())
        count++;
    

    【讨论】:

    • 感谢您回复 Siva。计算字符串中的空格数是一种好方法吗?您能否解释一下带有三个空格的“AA A”如何给我答案为 4?要获得确切的空格数,我需要从得到的答案中减去 1 吗?
    • 模式模式 = Pattern.compile("\\s");匹配器 matcher = pattern.matcher("AA");整数计数 = 0;而(matcher.find())计数++;你可以这样使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多