为从文件读取的数据提供错误的计数

时间:2014-08-20 01:56:01

标签: java filereader filewriter

我正在尝试从文件中读取和写入一些数据,并使用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。

有人可以解释一下我没有得到确切答案的原因。

2 个答案:

答案 0 :(得分:2)

来自String.split的docs

  
    

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

  

因此,如果没有空格,将返回原始字符串,因此长度为1。

如果你有一个空格,比如“AAA AAA”,那么数组将有两个元素“AAA”和“AAA”。所以长度总是比令牌的数量大一个。

答案 1 :(得分:1)

为什么一个如果没有空间

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

为什么总是不止一个如果空间

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

查找空间计数

Pattern pattern = Pattern.compile("\\s");

Matcher matcher = pattern.matcher("AA   A");

int count = 0;
while (matcher.find())
    count++;