Поиск и замена слов в Java - PullRequest
2 голосов
/ 13 июня 2011

У меня есть строка с символами a-z, A-Z, 0-9, (, ), +, - и т. Д.

Я хочу найтикаждое слово в этой строке и замените его тем же словом с 'word' (добавлены одинарные кавычки).Словам в этой строке может предшествовать / сопровождаться "(", ")" и пробелами.

Как мне это сделать?

Ввод:

(Movie + 2000)

Вывод:

('Movie' + '2000')

Ответы [ 4 ]

7 голосов
/ 13 июня 2011

Будьте проще! Это делает то, что вам нужно:

String input = "(Movie + 2000)";

input.replaceAll("\\b", "'");  
// Outputs  "('Movie' + '2000')"

Используется регулярное выражение \b, которое является «границей слова». Что может быть проще?

0 голосов
/ 28 мая 2017

Возвращать строку имеет смысл, только если произошла замена, см. Ниже:

if(s>0)
    return result.toString();
else
    return null;
0 голосов
/ 13 июня 2011

Как указано в комментариях, регулярное выражение является хорошим способом:

String input = "(Movie + 2000)";

input = input.replaceAll("[A-Za-z0-9]+", "'$0'");

Вы не даете точное определение слова, поэтому я предполагаю, что это любая комбинация букв и цифр.

РЕДАКТИРОВАТЬ ОК, спасибо @Buhb за объяснение, почему это решение не самое лучшее.Лучшее решение дал @ Bohemian.

0 голосов
/ 13 июня 2011
public class Main {

/**
 * @param args
 */
public static void main(String[] args) {

    String str1 = "Hello string";
    String str2 = "str";

    System.out.println(replace(str1, str2, "'" + str2 + "'"));
}

static String replace(String str, String pattern, String replace) {
    int s = 0;
    int e = 0;
    StringBuffer result = new StringBuffer();

    while ((e = str.indexOf(pattern, s)) >= 0) {
        result.append(str.substring(s, e));
        result.append(replace);
        s = e + pattern.length();
    }
    result.append(str.substring(s));
    return result.toString();
}
}

Вывод: Hello 'str'ing

WBR

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