Замена строк в вопросе Java - PullRequest
1 голос
/ 27 апреля 2011

Скажем, у меня есть исходный файл Java, сохраненный в строковую переменную, вот так.

String contents = Utils.getTextFromFile(new File(fileName));

И, скажем, в исходном файле есть строка текста, например,

String x = "Hello World\n";

Обратите внимание на символ новой строки в конце.

В моем коде я знаю о существовании Hello World, но не Hello World\n поэтому, следовательно, вызов

String search = "Hello World";
contents = contents.replaceAll(search, "Something Else");

потерпит неудачу из-за этого символа новой строки. Как я могу сделать так, чтобы он совпадал в случае одного или нескольких символов новой строки? Может ли это быть регулярное выражение, которое я добавляю в конец переменной search?

EDIT:

Я заменяю строковые литералы переменными. Я знаю литералы, но я не знаю, есть ли у них символ новой строки или нет. Вот пример кода перед моей заменой. Для замены я знаю, что application running at a time. существует, но не application running at a time.\n\n

int option = JOptionPane.showConfirmDialog(null,"There is another application running. There can only be one application\n" +
"application running at a time.\n\n" + 
"Press OK to close the other application\n" + 
"Press Cancel to close this application",
"Multiple Instances of weh detected", 
JOptionPane.OK_CANCEL_OPTION, JOptionPane.ERROR_MESSAGE);

А вот пример после моей замены

int option = JOptionPane.showConfirmDialog(null,"There is another application running. There can only be one application\n" +
"application running at a time.\n\n" + 
"Press OK to close the other application\n" + 
"PRESS_CANCEL_TO_CLOSE",
"MULTIPLE_INSTANCES_OF",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.ERROR_MESSAGE);

Обратите внимание, что все литералы без перевода строки заменяются, например, "Multiple Instances of weh Detected" теперь "MULTIPLE_INSTANCES_OF", но все с новыми строками - нет. Я думаю, что есть какое-то регулярное выражение, которое я могу добавить для обработки одного или нескольких символов новой строки, когда оно пытается заменить все.

Ответы [ 5 ]

1 голос
/ 27 апреля 2011
String search = "Hello World\n\n\n";                           
search.replaceAll ("Hello World(\\n*)", "Guten Morgen\1");

\ 1 захватывает первую группу, отмеченную (...), считая от открывающей скобки.\ n + is \ n для новой строки, но обратная косая черта должна маскироваться в Java, что приводит к двум обратным косым чертам.* означает от 0 до n, поэтому он будет перехватывать 0, 1, 2, ... переводы строки.

1 голос
/ 27 апреля 2011

хорошо, поскольку на самом деле это регулярное выражение, которое передается в качестве первого аргумента, вы можете попробовать что-то вроде этого в качестве первого аргумента

String search = "[^]?[H|h]ello [W|w]orld[\n|$]?"

, который будет искать привет мир повсюду в начале и в конце строки, где есть \ n или нет.

немного избыточно, и, как указано, это не имеет значения, но ... очевидно, это имеет значение

попробуйте это (сделало его изящным, чтобы оно совпадало с прописными и обычными буквами: P ... просто переусердствуйте)

1 голос
/ 27 апреля 2011

Если вы заменяете только строковые литералы и можете заменить каждое вхождение литерала (а не только первый), вам следует использовать метод replace вместо replaceAll.

Ваш первый пример должен измениться на:

String search = "Hello World";
contents = contents.replace(search, "Something Else");

replaceAll выполняет замену регулярного выражения вместо строкового литерала. Это обычно медленнее и не является строго обязательным для вашего варианта использования.

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

0 голосов
/ 23 декабря 2015

По вашему вопросу вам необходимо пройти следующий charator

public String replaceAll (регулярное выражение строки, замена строки)

Два параметра -

regex – the regular expression to match
replacement – the string to be substituted for every match

Некоторым другим методом является: -

replace(char oldChar, char newChar)
replace(CharSequence target, CharSequence replacement)
replaceFirst(String regex, String replacement)

пример

import  java.lang.String;

public class StringReplaceAllExample {

public static void main(String[] args) {

String str = "Introduction 1231 to  124 basic 1243 programming 34563 concepts 5455";

String Str1 = str.replaceAll("[0-9]+", "");

System.out.println(Str1);

Str1 = str.replaceAll("[a-zA-Z]+", "Java");

System.out.println(Str1);

}

}
0 голосов
/ 27 апреля 2011

Как отметили комментаторы, \ n не должно испортить это. Однако, если вы в порядке с удалением новых строк, вы можете попробовать это:

contents = contents.replaceAll ("поиск" + "\\ n *", "Что-то еще");

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