Как удалить в строке пробелы исключая из проверки подстроки

Рейтинг: 1Ответов: 1Опубликовано: 27.02.2023

Строка имеет вид: "IF ( fd1="","Not found",fd1 )" Возможно ли с помощью регулярного выражения (или другим способом) удалить все пробелы в строке, но исключить пробелы в подстроке "Not found" ? Подстрок может быть несколько с различным текстом. Я пробовал использовать вариант:

str.replaceAll("\\s", "");

Но в этом случае в подстроке также удаляются пробелы.

Ответы

▲ 2

Используйте шаблон с негативными просмотрами назад и вперед (?<!Not)\\s(?!found)

public class Main {
    public static void main(String[] args) {
        String text = "IF ( fd1=\"\",\"Not found\",fd1 )";
        text = text.replaceAll("(?<!Not)\\s(?!found)", "");
        System.out.println(text);
    }
}
IF(fd1="","Not found",fd1)

Более сложная версия для обработки случаев вида IF ( fd1="","Not around",fd1 ):

public class Main {
    public static void main(String[] args) {
        String[] texts = {"IF ( fd1=\"\",\"Not found\",fd1 )",
                          "IF ( fd1=\"\",\"Not around\",fd1 )",
                          "IF ( fd1=\"\",\"Yes found\",fd1 )",
                          "IF ( fd1=\"\",\"Blood hound\",fd1 )"};
        for (String t : texts)
            System.out.println(t.replaceAll("(?<!Not)\\s+(?!found)|(?<!Not)\\s+(?=found)|(?<=Not)\\s+(?!found)", ""));
    }
}
IF(fd1="","Not found",fd1)
IF(fd1="","Notaround",fd1)
IF(fd1="","Yesfound",fd1)
IF(fd1="","Bloodhound",fd1)

Демо