Как заменить все строки, которые не находятся между двумя символами? - PullRequest
0 голосов
/ 07 апреля 2020

Пример (замена 'text' на '...'):

До: текст (текст) текст

После: ... (текст) ...

Ответы [ 3 ]

1 голос
/ 08 апреля 2020

В этом случае легче найти то, что вы хотите сохранить, и заменить остальные.

Например, вот так:

static String abbreviate(String input, String openTag, String closeTag) {
    String regex = Pattern.quote(openTag) + ".*?" + Pattern.quote(closeTag);
    StringBuilder buf = new StringBuilder();
    int start = 0;
    for (Matcher m = Pattern.compile(regex).matcher(input); m.find(); start = m.end()) {
        if (start < m.start())
            buf.append("...");
        buf.append(m.group());
    }
    if (start < input.length())
        buf.append("...");
    return buf.toString();
}

Тест

System.out.println(abbreviate("text(text)text(text)text", "(", ")"));
System.out.println(abbreviate("text$text$text$text$text$text", "$", "$"));
System.out.println(abbreviate("text(text)text", ")", "("));

Выход

...(text)...(text)...
...$text$...$text$...
...
0 голосов
/ 07 апреля 2020
String s = "text(text)text";
String newString = s.replace("text", "...");
System.out.println(newString);      //returns ...(...)...
  1. Обратите внимание, что «(текст)» по-прежнему содержит «текст», скобки вокруг него не помешают его замене.

  2. Вы нужно присвоить результат новой строке, чтобы использовать его. Строки неизменны

0 голосов
/ 07 апреля 2020

Вам нужно перебирать символы и добавлять только те, которые находятся между двумя указанными символами. Это можно сделать следующим образом:

private String splitStr(String str, char first, char second) {
        StringBuilder sb = new StringBuilder();
        if(str.isEmpty() || str.indexOf(first) < 0 || str.indexOf(second) < 0)
            return sb.toString();
        char[] chars = str.toCharArray();
        boolean append = false;
        for(char c : chars) {
            if(c == first) {
                sb.append(c);
                append = true;
            }else if(c == second) {
                sb.append(c);
                append = false;
            }else if(append)
                sb.append(c);
        }
        return sb.toString();
}

Некоторые примеры:

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