Проверьте конкретный символ в Java Regex - PullRequest
0 голосов
/ 27 января 2019

Как проверить, содержит ли строка только один определенный символ?Например:

На строке square/retrofit и square/retrofit/issues Мне нужно проверить, имеет ли строка более одного / символа.

square/retrofit/issues должно быть ложным, поскольку имеет большечем один / символ и square/retrofit должны быть истинными.

Строка может иметь числа.

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Или, если вы хотите использовать более современный подход с потоками:

boolean occursOnlyOnce(String stringToCheck, char charToMatch) {
    return stringToCheck.chars().filter(ch -> ch == charToMatch).count() == 1;
}

Отказ от ответственности: это не самый оптимальный подход.

Чуть большеоптимизированный подход:

    boolean occursOnlyOnce(String stringToCheck, char charToMatch) {
    boolean isFound = false;
    for (char ch : stringToCheck.toCharArray()) {
        if (ch == charToMatch) {
            if (!isFound) {
                isFound = true;
            } else {
                return false; // More than once, return immediately
            }
        }
    }
    return isFound; // Not found
}
0 голосов
/ 27 января 2019

Вам не нужно регулярное выражение.Простых indexOf и lastIndexOf методов должно быть достаточно.

boolean onlyOne = s.indexOf('/') == s.lastIndexOf('/');

EDIT 1
Конечно, если / не появится в данной строке выше, будет true.Таким образом, чтобы избежать этой ситуации, вы также можете проверить, что возвращается индекс из одного из этих методов.

РЕДАКТИРОВАТЬ 2
Рабочее решение:

class Strings {
    public static boolean availableOnlyOnce(String source, char c) {
        if (source == null || source.isEmpty()) {
            return false;
        }

        int indexOf = source.indexOf(c);
        return (indexOf == source.lastIndexOf(c)) && indexOf != -1;
    }
}

Контрольные примеры:

System.out.println(Strings.availableOnlyOnce("path", '/'));
System.out.println(Strings.availableOnlyOnce("path/path1", '/'));
System.out.println(Strings.availableOnlyOnce("path/path1/path2", '/'));

Отпечатки:

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