2016-06-07 2 views
0

Мне нужно добавить пару операторов импорта в каждый файл в проекте java. Я написал регулярное выражение для выполнения этой операции.Поиск и обновление регулярных выражений Java

File1.java 
/********************** 
* 
*History Card 
* 
***********************/ 
package com.employee.details; 

import java.io.BufferedReader; 
import java.io.File; 

public class File1 
{ 

// java code 
} 

File2.java 

package com.employee.details; 
/********************** 
* 
*History Card 
* 
***********************/ 
import java.io.BufferedReader; 
import java.io.File; 

public class File1 
{ 

// java code 
} 

код для выполнения обновления:

String regEx = "^package .*;"; 
String pattern = "\0\n\nimport java.io.FileReader;\nimport java.nio.file.Path;"; 
textFile.replaceAll(regEx,pattern); 

это не работает. Что не так в моем коде? пожалуйста, помогите мне

ответ

0

Проблема: a) комментарий в начале файла, b) жадный квантификатор и c) отсутствие назначения переменной. Вероятно, также была удалена декларация пакета. Вы должны использовать этот код:

String regex = "(package .*?;)"; 
String replacement = "$1\0\n\nimport java.io.FileReader;\nimport java.nio.file.Path;"; 
textFile = textFile.replaceFirst(regex, replacement); 

строки в Java (в большинстве языков, на самом деле) неизменны, и, таким образом, вы не можете изменить каждый экземпляр этой строки сразу без очень большого количества кода.

-1

@RamenChef почти сразу же за исключением того, что группировки (т.е. ( и )) не является необходимым и обратной ссылки (т.е. \0) тоже. Так следующий код будет работать: только

String regEx = "^package .*;"; 
String pattern = "$0\n\nimport java.io.FileReader;\nimport java.nio.file.Path;"; 
textFile = textFile.replaceAll(regEx,pattern); 

Примечание разницу между вашим кодом и это знак доллара, прежде чем 0 и присвоение replaceAll результата textFile потому String тип immutable.

+0

Почему вы не можете просто прокомментировать мой ответ? – RamenChef

+0

@RamenChef причине комментарии не позволяют размещать довольно форматированный код. – Ilya

0

Ваша проблема заключается в том, что java использует знак доллара для обратных ссылок, а не обратную косую черту.

В вашей замены \0 является nul символ (шестнадцатеричный ноль), не группа равна нулю. Измените его на $0:

String pattern = "$0\n\nimport java.io.FileReader;\nimport java.nio.file.Path;"; 
        ^----- backslash changed to dollar sign 
+0

Я думал, что '\ 0' - это [обратная ссылка] (https://docs.oracle.com/javase/tutorial/essential/regex/groups.html#backref). Я ошибаюсь? – Ilya

+0

@ Илья, ты ошибаешься. '\ 0' - обратная ссылка на некоторых других языках, но не на Java, где она является символом nul (' 0x00' или '\ u0000'). В Java обратные ссылки имеют форму '$ n', где n равно 0-9, а нуль группы - это полное совпадение. – Bohemian

Смежные вопросы