我目前有以下代码:
public class Count {
public static void countChar() throws FileNotFoundException {
Scanner scannerFile = null;
try {
scannerFile = new Scanner(new File("file"));
} catch (FileNotFoundException e) {
}
int starNumber = 0; // number of *'s
while (scannerFile.hasNext()) {
String character = scannerFile.next();
int index =0;
char star = '*';
while(index<character.length()) {
if(character.charAt(index)==star){
starNumber++;
}
index++;
}
System.out.println(starNumber);
}
}
我试图找出文本文件中出现*的次数。例如,给定一个包含的文本文件 嗨*我的名字*
该方法应以3
返回目前发生的情况是上面的例子,该方法将返回:
0 1 1 2 2 3
提前致谢。
答案 0 :(得分:3)
使用Apache commons-io将文件读入字符串
String org.apache.commons.io.FileUtils.readFileToString(File file);
然后,使用Apache commons-lang来计算*
的匹配:
int org.apache.commons.lang.StringUtils.countMatches(String str, String sub)
结果:
int count = StringUtils.countMatches(FileUtils.readFileToString(file), "*");
答案 1 :(得分:2)
int countStars(String fileName) throws IOException {
FileReader fileReader = new FileReader(fileName);
char[] cbuf = new char[1];
int n = 0;
while(fileReader.read(cbuf)) {
if(cbuf[0] == '*') {
n++;
}
}
fileReader.close();
return n;
}
答案 2 :(得分:2)
除了每行打印计数外,方法中的所有内容都可以正常工作:
while (scannerFile.hasNext()) {
String character = scannerFile.next();
int index =0;
char star = '*';
while(index<character.length()) {
if(character.charAt(index)==star){
starNumber++;
}
index++;
}
/* PRINTS the result for each line!!! */
System.out.println(starNumber);
}
答案 3 :(得分:0)
此时我会坚持使用Java库,然后在您熟悉核心Java API时使用其他库(例如公共库)。这是我的头脑,可能需要调整才能运行。
StringBuilder sb = new StringBuilder();
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
while (s != null)
{
sb.append(s);
s = br.readLine();
}
br.close(); // this closes the underlying reader so no need for fr.close()
String fileAsStr = sb.toString();
int count = 0;
int idx = fileAsStr('*')
while (idx > -1)
{
count++;
idx = fileAsStr('*', idx+1);
}