我正在尝试从文件中读取和写入一些数据,并使用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。
有人可以解释一下我没有得到确切答案的原因。
答案 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++;