Как мне разделить строку в Java?
Я хочу разделить строку с помощью разделителя, например разделить "004-034556"
на две отдельные строки с помощью разделителя "-"
:
part1 = "004";
part2 = "034556";
Это означает, что первая строка будет содержать символы перед '-'
, а вторая строка будет содержать символы после '-'
.
Я также хочу проверить, есть ли в строке разделитель ('-'
).
Переведено автоматически
Ответ 1
Используйте метод с соответствующим именем String#split()
.
String string = "004-034556";
String[] parts = string.split("-");
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556
Обратите внимание, что предполагается, что аргумент 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 {
throw new IllegalArgumentException("String " + string + " does not contain -");
}
Обратите внимание, для этого не требуется регулярное выражение. Вместо этого используйте String#matches()
.
Если вы хотите сохранить разделяемый символ в результирующих частях, используйте положительный поиск. Если вы хотите, чтобы разделяемый символ заканчивался слева, используйте положительный поиск сзади, добавив префикс ?<=
group в шаблоне.
String string = "004-034556";
String[] parts = string.split("(?<=-)");
String part1 = parts[0]; // 004-
String part2 = parts[1]; // 034556
Если вы хотите, чтобы символ разделения заканчивался справа, используйте позитивный прогноз, добавляя префикс ?=
group в шаблоне.
String string = "004-034556";
String[] parts = string.split("(?=-)");
String part1 = parts[0]; // 004
String part2 = parts[1]; // -034556
Если вы хотите ограничить количество результирующих частей, то вы можете указать желаемое число в качестве 2-го аргумента split()
метода.
String string = "004-034556-42";
String[] parts = string.split("-", 2);
String part1 = parts[0]; // 004
String part2 = parts[1]; // 034556-42
Ответ 2
Альтернативой прямой обработке строки было бы использование регулярного выражения с захватом групп. Преимущество этого в том, что оно упрощает наложение более сложных ограничений на входные данные. Например, следующее разбивает строку на две части и гарантирует, что обе будут состоять только из цифр:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
class SplitExample
{
private static Pattern twopart = Pattern.compile("(\\d+)-(\\d+)");
public static void checkString(String s)
{
Matcher m = 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.");
}
}
public static void main(String[] args) {
checkString("123-4567");
checkString("foo-bar");
checkString("123-");
checkString("-4567");
checkString("123-4567-890");
}
}
Поскольку шаблон в этом экземпляре фиксирован, его можно скомпилировать заранее и сохранить как статический элемент (в примере инициализируется во время загрузки класса). Регулярное выражение является:
(\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)
throw new IllegalArgumentException("String not in correct format");
Это разделит вашу строку на две части. Первым элементом в массиве будет часть, содержащая данные перед -
, а второй элемент в массиве будет содержать часть вашей строки после -
.
Если длина массива не равна 2, значит, строка была не в формате: string-string
.
Ознакомьтесь с методом split() в String
классе.
Ответ 4
Это:
String[] out = string.split("-");
должно получиться то, что вы хотите. Класс string имеет множество методов для работы со строкой.