我的文件包含像这样的模式文本
Type:status Origin:some text Text:some text URL:some url Time:time
大约500行,具有相同的模式。我想只从中提取文本部分。我尝试使用BufferedReader
阅读该文件并使用indexOf("Text")
和indexOf("URL")
以及subString(i,j)
,但在运行时给出了异常。我怎样才能做到这一点。我的代码:
FileReader fr = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fr);
FileWriter wr = new FileWriter("new.txt");
// char buffer[] = null;
String s;
String str="";
BufferedWriter bw = new BufferedWriter(wr);
while ((s = br.readLine()) != null) {
str= str + s;
i = str.indexOf("Text:");
j= str.indexOf("URL:");
String a= str.substring(i, j);
bw.write(a);
}
br.close();
bw.close();
答案 0 :(得分:0)
您可以使用
String[] pieces = str.split(":");
这将为您提供一系列字符串,这些字符串按您放在括号中的内容进行拆分。然后,如果您知道模式,您可以通过循环迭代来获取每个部分。例如:如果您知道Type在[0]并且每个序列中有6个东西,您可以说下一个Type将在[6],依此类推。
答案 1 :(得分:0)
您应该检查索引。 i
和j
。如果一行错误,它将跳过它并打印控制台错误的行。您应该以不同的方式处理它,但请记住,子字符串不应该喜欢-1的索引。
FileReader fr = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fr);
String tokenText = "Text:";
String tokenURL = "URL:";
FileWriter wr = new FileWriter("new.txt");
// char buffer[] = null;
String s;
String str="";
BufferedWriter bw = new BufferedWriter(wr);
while ((s = br.readLine()) != null) {
String a;
str = str + s;
i = str.indexOf(tokenText);
j = str.indexOf(tokenURL);
if (i < 0 && j >= 0){
// pad with the token string
a = s.substring(j + tokenURL.length);
} else if(i >= 0) {
// pad with the token string
a = s.substring(i + tokenText.length);
} else {
System.out.printl("Unparsed line:");
System.out.printl(s);
}
bw.write(a);
}
br.close();
bw.close();
那就是说,正如jonhchen902在评论中所说,你也可以在while循环之后检查字符串。这实际上取决于您的输入文件,以及您是否希望多次或一次找到“字符串”。
答案 2 :(得分:0)
"Text:"
位于第3行,"URL:"
位于第4行,但如果您的程序找不到两个字符串,则会抛出异常。
即使它有效,你也会一遍又一遍地找到相同的文字。
尝试这样的事情:
FileReader fr = new FileReader("test.txt");
BufferedReader br = new BufferedReader(fr);
FileWriter wr = new FileWriter("new.txt");
String s;
BufferedWriter bw = new BufferedWriter(wr);
while ((s = br.readLine()) != null) {
if (s.startsWith("Text:"))
bw.write(s);
}
br.close();
bw.close();