我在文件中有这样的字符串
<script>
Evening</script>
我编写了一个替换此字符串的代码,但它没有识别换行符 I,E。我想用以下字符替换上面的字符串:
<h1>Done</h1>
代码是这样的:
package stringreplace;
import java.io.*;
import org.omg.CORBA.Request;
public class stringreplace {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
FileReader fr = null;
BufferedReader br = null;
try
{
fr = new FileReader("G://abc.html");
br = new BufferedReader(fr);
String newtext="";
String line="";
String matchExist1 = "<script>\r\nEvening</script>";
String newpattern = "<h1>Done</h1>";
String matchExist2 = "</body>";
String newpattern2 = "<script>alpha</script></body>";
StringBuffer sb = new StringBuffer();
while((line=br.readLine())!=null)
{
int ind2 = line.indexOf(matchExist1);
System.out.println(ind2);
int ind3 = line.indexOf(matchExist2);
if((ind2==-1) || (ind3==-1))
{
line = line.replaceFirst(matchExist1,newpattern);
line = line.replaceFirst(matchExist2,newpattern2);
sb.append(line+"\n");
}
//sb.append(line+"\n");
else if((ind2!=-1) || (ind3!=-1))
{
String tag = "</body>";
line = line.replaceFirst("</body>",tag);
sb.append(line+"\n");
}
}
br.close();
FileWriter fw = new FileWriter("G://abc.html");
fw.write(sb.toString());
fw.close();
System.out.println("done");
System.out.println(sb);
}
catch (Exception e)
{
System.out.println(e);
}
}
}
但它没有识别换行符。
答案 0 :(得分:3)
由于您一次只能读取一个输入行,因此几乎不能指望匹配跨越两行的模式。您必须首先修复读取至少包含两行。一旦你完成了这个,@ sterna的答案就会成功
答案 1 :(得分:1)
我认为您无法确定新线的外观。所以我不会匹配特定的序列而是使用\s+
这至少是一个空白字符,并且包含所有换行符。
String matchExist1 = "<script>\\s+Evening</script>";
修改强>
当然,你必须首先修复mgc描述的问题(+1)。然后你可以利用我的答案!