Удалить строку, если она заканчивается в Java - PullRequest
0 голосов
/ 20 декабря 2018

Я должен удалить «ИЛИ», если он заканчивается на данной строке.

public class StringReplaceTest {

    public static void main(String[] args) {
        String text = "SELECT count OR %' OR";
        System.out.println("matches:" + text.matches("OR$"));

        Pattern pattern = Pattern.compile("OR$");
        Matcher matcher = pattern.matcher(text);

        while (matcher.find()) {
            System.out.println("Found match at: " + matcher.start() + " to " + matcher.end());
            System.out.println("substring:" + text.substring(matcher.start(), matcher.end()));
            text = text.replace(text.substring(matcher.start(), matcher.end()), "");
            System.out.println("after replace:" + text);
        }

    }
}

Вывод:

matches:false
Found match at: 19 to 21
substring:OR
after replace:SELECT count  %' 

Его удаление всех вхождений строки «ИЛИ»но я должен удалить, если это заканчивается только.Как это сделать?

Также регулярное выражение работает с Pattern, но не работает с String.matches ().В чем разница между обоими и каков наилучший способ удалить строку, если она заканчивается?

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Если вам нужно просто удалить последнее ИЛИ, тогда я предлагаю использовать метод substring, так как он быстрее, чем шаблон полного регулярного выражения.В этом случае вы можете удалить ИЛИ, используя этот код:

text.substring(0, text.lastIndexOf("OR"));

Если вам нужно заменить ИЛИ чем-то другим, вам нужно будет использовать этот код, который обнаруживает последнее ИЛИ с разрывом в строке.

text.replaceFirst("\\bOR$", "SOME");
0 голосов
/ 20 декабря 2018

text.matches(".*OR$"), поскольку совпадение проходит по всей строке.Или:

if (text.endsWith("OR"))

Или:

text = text.replaceFirst(" OR$", "");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...