答:我有部分解决方案,但我要求Stack Overflow社区帮助完成最后一点。
程序应如何运行:
返回行号和字号;单词编号与行
如果"现在如何"被发现是两个连续行的前两个单词,它将返回"现在如何"在位置1的k线上找到,并且在位置1的k + 1线上再次找到。
如果该行是"现在如何计算monte brown cow cristo"那么它应该能够检测到"现在如何"和"棕色牛"作为两个单独的事件发生。
解决方案1:
int chn = 0;
int cbc = 0;
Scanner in = new Scanner(new File("filename.txt"));
String temp = in.nextLine();
Pattern phn = Pattern.compile("how now");
Pattern pbc = Pattern.compile("brown cow");
Matcher mhn = null;
Matcher mbc = null;
while (in.hasNext()) {
mhn = phn.matcher(temp);
while (mhn.find()) m++;
mbc = pbc.matcher(temp);
while (mbc.find()) j++;
temp = in.nextLine();
} // Formatted output comes after
事情是,通过使用模式和匹配器跟踪出现次数(chn,cbc),并跟踪时间顺序,并且这是最快的算法,我不知所措我怎样才能跟踪它出现在哪一行。
解决方案2:
Scanner in = new Scanner(new File("filename.txt"));
ArrayList<String> wordsInLine = new ArrayList<>();
String temp = in.nextLine();
String temp2 = "";
ctL = 1;
while (in.hasNext()) {
if (temp.contains("how now")) {
for (String word : temp.split(" ")) {
wordsInLine.add(word);
}
for (int i = 0; i < wordsInLine.size(); i++) {
if (wordsInLine.get(i).equals("how") ||
wordsInLine.get(i + 1).equals("now")) {
System.out.println("This returns line count and "
+ "the occurrence by getting i");
}
}
}
ctL++;
temp = in.nextLine();
}
但是这个第二个部分解决方案看起来非常低效且速度非常慢,每个行包含两个for循环,包含&#34;现在如何。&#34;
有更优雅的方式吗?
答案 0 :(得分:2)
答案 1 :(得分:0)
使用解决方案1.使用start,end和group方法跟踪匹配的子序列:
mhn = phn.matcher(temp);
while (mhn.find()) {
System.out.print(mhn.start() + ", ");
System.out.print(mhn.end() + ", ");
System.out.println(mhn.group());
m++;
}