Я пытаюсь проверить, содержит ли строка только
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\\.]
неверно, но я действительно не знаю, как его указать. Заранее спасибо!
String.contains
работает с Strings
NOT с REGEX
. вместо этого используйте String.matches
. Как указывает @lazy, вы можете использовать классы Pattern и Matcher.
test.contains("[^10\\.]") == true
Все, что вы делаете здесь, это проверка того, содержит ли тест литералы String [^ 10 \.]
[^10\\.]
Говорит: «Строка начинается с 1, за которым следует 0 и точка». Просто переосмыслите то, чего вы хотите достичь. Кроме того, contains () может не подходить для этой цели. Ссылайтесь на Javadoc .