Обратите внимание, что предполагается, что аргумент split's является регулярным выражением, поэтому не забудьте при необходимости экранировать специальные символы.
существует 12 символов со специальными значениями: обратная косая черта \, каретка ^, знак доллара $, точка ., вертикальная черта или символ канала |, вопросительный знак ?, звездочка *, знак плюс +, открывающая скобка (, закрывающая скобка ) и открывающая квадратная скобка [, открывающая фигурная скобка {, эти специальные символы часто называют "метасимволами".
Например, для разделения по точке . (что означает "любой символ" в регулярном выражении) используйте либо обратную косую черту \, чтобы экранировать отдельный специальный символ, подобный so split("\\."), либо используйте символьный класс [] для представления буквенных символов, подобных so split("[.]"), либо используйте Pattern#quote(), чтобы экранировать всю строку, подобную so split(Pattern.quote(".")).
String[] parts = string.split(Pattern.quote(".")); // Split on the exact string.
Чтобы заранее проверить, содержит ли строка определенные символы, просто используйте String#contains().
if (string.contains("-")) { // Split it. } else { thrownewIllegalArgumentException("String " + string + " does not contain -"); }
Обратите внимание, для этого не требуется регулярное выражение. Вместо этого используйте String#matches().
Если вы хотите сохранить разделяемый символ в результирующих частях, используйте положительный поиск. Если вы хотите, чтобы разделяемый символ заканчивался слева, используйте положительный поиск сзади, добавив префикс ?<= group в шаблоне.
Альтернативой прямой обработке строки было бы использование регулярного выражения с захватом групп. Преимущество этого в том, что оно упрощает наложение более сложных ограничений на входные данные. Например, следующее разбивает строку на две части и гарантирует, что обе будут состоять только из цифр:
publicstaticvoidcheckString(String s) { Matcherm= twopart.matcher(s); if (m.matches()) { System.out.println(s + " matches; first part is " + m.group(1) + ", second part is " + m.group(2) + "."); } else { System.out.println(s + " does not match."); } }
Поскольку шаблон в этом экземпляре фиксирован, его можно скомпилировать заранее и сохранить как статический элемент (в примере инициализируется во время загрузки класса). Регулярное выражение является:
(\d+)-(\d+)
Круглые скобки обозначают группы захвата; к строке, которая соответствует этой части регулярного выражения, можно получить доступ с помощью метода Match.group(), как показано. Символ \d соответствует единственной десятичной цифре, а + означает "соответствует одному или нескольким предыдущим выражениям"). Символ - не имеет особого значения, поэтому просто соответствует этому символу во входных данных. Обратите внимание, что вам нужно дважды экранировать обратную косую черту при записи этого в виде строки Java. Некоторые другие примеры:
([A-Z]+)-([A-Z]+) // Each part consists of only capital letters ([^-]+)-([^-]+) // Each part consists of characters other than - ([A-Z]{2})-(\d+) // The first part is exactly two capital letters, // the second consists of digits
Ответ 3
Использовать:
String[] result = yourString.split("-"); if (result.length != 2) thrownewIllegalArgumentException("String not in correct format");
Это разделит вашу строку на две части. Первым элементом в массиве будет часть, содержащая данные перед -, а второй элемент в массиве будет содержать часть вашей строки после -.
Если длина массива не равна 2, значит, строка была не в формате: string-string.