我必须在java中编写一个程序来读取文件,搜索单词" haystack"和"针"在每一行中,吐出单词" needle"的位置。如果这个词" haystack"在"针"之前是2行。到目前为止,我的程序将读取文件并将吐出2个单词的位置,如果它们在行中,但我无法弄清楚如何让它吐出"针&#的位置34;如果" haystack"之前是2行。此外,如果其中一个单词不在该行中,则它会吐出-1作为位置。有人可以帮忙吗? (请记住,我是一名初学程序员,并不是很擅长)。
这是我的代码:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.swing.JFileChooser;
import javax.swing.text.html.HTMLDocument.Iterator;
public class NeedleInHaystack{
public static void main(String[] args){
JFileChooser jfc = new JFileChooser();
int action = jfc.showOpenDialog(null);
if (action != JFileChooser.APPROVE_OPTION){
System.out.println("Ok, if you don't want to play");;
System.exit(3);
}
String fs = jfc.getSelectedFile().getAbsolutePath();
System.out.println("User selected: " + fs);
String fo = fs + "output.txt";
System.out.println("output: " + fo);
try {
FileReader fr = new FileReader(fs);
BufferedReader br = new BufferedReader(fr);
FileWriter fw = new FileWriter(fo);
PrintWriter pw = new PrintWriter(fw);
while (true) {
String l = br.readLine();
if (l == null) {
System.out.println("Looks like we are at the end of the line");
break;}
System.out.println("Input: " + l);
int firstNeedle;
int firstHaystack;
firstNeedle = l.indexOf("needle");
System.out.println("Found needle at:" + firstNeedle);
firstHaystack = l.lastIndexOf("haystack");
//String name = l.substring(0, firstNeedle);
System.out.println("found haystack at: " + firstHaystack);
//pw.println(l);
}
br.close();
pw.close();
System.out.println("That's all, folks!");
}catch(Exception e){
e.printStackTrace();
}
}
答案 0 :(得分:0)
首先你需要一个counter
,它将在while循环中递增,一个整数变量在循环之外声明,它将存储找到“haystack”的行号。
现在如果在“needle”之前找到“haystack”2行,你将获得“haystack”的行号,你可以将该行号与counter
进行比较。