Заменить определенную строку из текстового файла - PullRequest
0 голосов
/ 13 марта 2012

Я пытаюсь заменить вхождение определенной строки из данного текстового файла.Вот код, который я написал:

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 . с новой строкой.

Но я не получаю желаемый результат.И я не могу видеть, где я иду не так.:-( Пожалуйста, помогите.: -)

Ответы [ 4 ]

3 голосов
/ 13 марта 2012

Точка означает «каждый символ» в регулярных выражениях. Попробуйте избежать этого:

Pattern pattern = Pattern.compile("\\./\\.");

(Вам нужно две обратной косой черты, чтобы избежать обратной косой черты внутри строки, чтобы Java знала, что вы хотите иметь обратную косую черту, а не специальный символ в качестве символа новой строки, например, \n

2 голосов
/ 13 марта 2012

У вашего регулярного выражения есть проблема. Также вам не нужно использовать Pattern и matcher. Просто используйте метод replaceAll () класса String для замены. Было бы проще Попробуйте код ниже:

        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();
2 голосов
/ 13 марта 2012

В регулярном выражении точка (.) соответствует любому символу (кроме символов новой строки), поэтому ее необходимо экранировать, если вы хотите, чтобы она соответствовала буквальной точке. Кроме того, вы, похоже, пропускаете первую точку в своем регулярном выражении, поскольку хотите, чтобы шаблон соответствовал ./.:

Pattern pattern = Pattern.compile("\\./\\.");
1 голос
/ 13 марта 2012

/. - это регулярное выражение \[any-symbol].Изменить на `/\\.'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...