我正在尝试从给定的文本文件中替换某个String的出现。这是我写的代码:
BufferedReader tempFileReader = new BufferedReader(new InputStreamReader(new FileInputStream(tempFile)));
File tempFileBuiltForUse = new File("C:\\testing\\anotherTempFile.txt");
Writer changer = new BufferedWriter(new FileWriter(tempFileBuiltForUse));
String lineContents ;
while( (lineContents = tempFileReader.readLine()) != null)
{
Pattern pattern = Pattern.compile("/.");
Matcher matcher = pattern.matcher(lineContents);
String lineByLine = null;
while(matcher.find())
{
lineByLine = lineContents.replaceAll(matcher.group(),System.getProperty("line.separator"));
changer.write(lineByLine);
}
}
changer.close();
tempFileReader.close();
假设我tempFile
的内容是:
This/DT is/VBZ a/DT sample/NN text/NN ./.
我希望anotherTempFile
包含:
This/DT is/VBZ a/DT sample/NN text/NN .
用新的一行。
但我没有得到理想的输出。而且我无法看到我出错的地方。 :-( 请帮助。 : - )
答案 0 :(得分:3)
点表示正则表达式中的“每个字符”。试着逃避它:
Pattern pattern = Pattern.compile("\\./\\.");
(你需要两个后退,以逃避String中的反斜杠本身,以便Java知道你想要一个反斜杠而不是一个特殊字符作为换行符,例如\n
答案 1 :(得分:2)
在正则表达式中,点(.
)匹配任何字符(换行符除外),因此如果您希望它与文字点匹配,则需要对其进行转义。此外,您似乎缺少正则表达式中的第一个点,因为您希望模式与./.
匹配:
Pattern pattern = Pattern.compile("\\./\\.");
答案 2 :(得分:2)
您的正则表达式有问题。此外,您不必使用模式和匹配器。只需使用String类的replaceAll()方法进行替换。这会更容易。请尝试以下代码:
tempFileReader = new BufferedReader(
new InputStreamReader(new FileInputStream("c:\\test.txt")));
File tempFileBuiltForUse = new File("C:\\anotherTempFile.txt");
Writer changer = new BufferedWriter(new FileWriter(tempFileBuiltForUse));
String lineContents;
while ((lineContents = tempFileReader.readLine()) != null) {
String lineByLine = lineContents.replaceAll("\\./\\.", System.getProperty("line.separator"));
changer.write(lineByLine);
}
changer.close();
tempFileReader.close();
答案 3 :(得分:1)
/.
是正则表达式\[any-symbol]
。
转到`/\\.'