Java: проверьте, содержит ли строка только 1,0 или точку [duplicate]

1

Я пытаюсь проверить, содержит ли строка только

  • 1

  • 0

  • ,

или сочетание этих трех.

Сначала у меня был этот код:

public static boolean controleSubnetmask(String mask) {
    try {
        String[] maskArray = mask.split(".");
        int[] subnetmask = new int[4];

        //array of string to array of int
        for (int i = 0; i < maskArray.length; i++) {
            subnetmask[i] = Integer.parseInt(maskArray[i]);
        }
        return true;
    } catch (NumberFormatException e) {
        return false;
    }
}

но это довольно сложно для того, что он делает, и не проверяет, введены ли только 1 и 0. Итак, теперь у меня есть это, но, похоже, я неправильно понял регулярные выражения, потому что это не работает:

public static void controleSubnetmask(String mask) {
    mask = "1100.110...11";
    String test = "p";
    if (mask.contains("[^10\\.]") == true) {
        System.out.println("wrong input");
    }
    if (test.contains("[^10\\.]") == true) {
        System.out.println("wrong input");
    }
}

Я ожидал сообщение "неправильного ввода" в тестовой строке, которая не появилась. Поэтому я верю своему регулярному выражению:

[^01\\.]

неверно, но я действительно не знаю, как его указать. Заранее спасибо!

  • 0
    Ваше регулярное выражение [^10\\.] Говорит: «Строка начинается с 1, за которым следует 0 и точка». Просто переосмыслите то, чего вы хотите достичь. Кроме того, contains () может не подходить для этой цели. Ссылайтесь на Javadoc .
Теги:

1 ответ

5
Лучший ответ

String.contains работает с Strings NOT с REGEX. вместо этого используйте String.matches. Как указывает @lazy, вы можете использовать классы Pattern и Matcher.

test.contains("[^10\\.]") == true 

Все, что вы делаете здесь, это проверка того, содержит ли тест литералы String [^ 10 \.]

  • 0
    Вы имеете в виду строковый литерал [^ 10 \.]?
  • 0
    @TimCastelijns - да .. отредактировал ответ .. спасибо :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню