Вопрос-ответ

How do I split a string in Java?

Как мне разделить строку в 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 имеет множество методов для работы со строкой.

java string