Используйте String.split()
, а затем String.equals()
в результирующих элементах массива, обрабатывая три случая отдельно.
После разделения сначала убедитесь, что оба полученных массива имеют одинаковую длину (если они не совпадают). Также используйте String.equals()
для проверки того, что первый элемент - "1"
и "2"
, если это требуется. Затем уточните, равна ли длина 2 или 3. Если длина равна 2, убедитесь, что это совпадение, как в вашем примере 1; снова используйте String.equals()
для элементов массива. Если длина равна 3, вам нужно проверить оба порядка переменных частей в соответствии с вашими двумя примерами 2 и 3.
Помните, что аргумент String.split()
является регулярным выражением и что точка имеет особое значение в регулярных выражениях. Поэтому вам нужно использовать .split("\\.")
, а не .split(".")
.
Он тоже должен работать довольно быстро. Однако не начинайте оптимизацию, пока не поймете, что вам нужна более высокая производительность. Читаемость - король.
Удачного кодирования.
Редактировать: Предполагая, что у вас было время написать собственное решение, я представляю свое для вдохновения и для сравнения со своим (и другими ответами, если хотите).
public static boolean match(String s1, String s2) {
String[] a1 = s1.split("\\.", 4);
String[] a2 = s2.split("\\.", 4);
if (a1.length != a2.length) {
return false;
}
if (a1[0].equals("1") && a2[0].equals("2")) {
if (a1.length == 2) {
return a1[1].equals(a2[1]);
} else if (a1.length == 3) {
return (a1[1].equals(a2[1]) && a1[2].equals(a2[2]))
|| (a1[1].equals(a2[2]) && a1[2].equals(a2[1]));
}
}
return false;
}
Попробуем 6 примеров из вопроса:
System.out.println("(1.111,2.111) " + match("1.111", "2.111"));
System.out.println("(1.121,2.111) " + match("1.121", "2.111"));
System.out.println("(1.11.22,2.11.22) " + match("1.11.22", "2.11.22"));
System.out.println("(1.11.22,2.111.22) " + match("1.11.22", "2.111.22"));
System.out.println("(1.22.11,2.11.22) " + match("1.22.11", "2.11.22"));
System.out.println("(1.11.22,2.111.22) " + match("1.11.22", "2.111.22"));
Это печатает:
(1.111,2.111) true
(1.121,2.111) false
(1.11.22,2.11.22) true
(1.11.22,2.111.22) false
(1.22.11,2.11.22) true
(1.11.22,2.111.22) false