Нужно разделить строку на две части в Java
У меня есть строка, которая содержит непрерывный кусок цифр, а затем непрерывный кусок символов. Мне нужно разделить их на две части (одну целочисленную часть и одну строку).
Я попытался с помощью String.split("D", 1)
, но это съедает первого персонажа.
Я проверил все строковые API и не нашел подходящего метода.
есть ли способ сделать это?
2 ответов
использовать lookarounds: str.split("(?<=\d)(?=\D)")
String[] parts = "123XYZ".split("(?<=\d)(?=\D)");
System.out.println(parts[0] + "-" + parts[1]);
// prints "123-XYZ"
\d
- это класс символов для цифр; \D
- это ее отрицание. Таким образом, это утверждение с нулевым соответствием соответствует позиции, где предыдущий символ является цифрой (?<=\d)
, и следующий символ не является цифрой (?=\D)
.
ссылки
обзоры вопросы
- Java split ест моих персонажей.
- есть ли способ разделить строки со строкой.split () и включить разделители?
альтернативное решение с использованием ограниченного разделения
следующие работы:
String[] parts = "123XYZ".split("(?=\D)", 2);
System.out.println(parts[0] + "-" + parts[1]);
это расщепляется как раз перед тем, как мы видим не-цифру. Это намного ближе к вашему исходному решению, за исключением того, что оно фактически не соответствует не цифровой символ, он не "съедает его". Кроме того, он использует limit
of 2
, что на самом деле то, что вы хотите здесь.
API ссылки
-
String.split(String regex, int limit)
- если лимит
n
больше нуля, тогда шаблон будет применяться не болееn - 1
раз, длина массива не будет больше, чемn
, и последняя запись массива будет содержать все входные данные за пределами последнего совпадения ограничитель данных.
- если лимит
всегда есть старомодный способ:
private String[] split(String in) {
int indexOfFirstChar = 0;
for (char c : in.toCharArray()) {
if (Character.isDigit(c)) {
indexOfFirstChar++;
} else {
break;
}
}
return new String[]{in.substring(0,indexOfFirstChar), in.substring(indexOfFirstChar)};
}
(надеюсь, он работает только с цифрами или только с символами-не могу проверить его здесь - если нет, возьмите его как общую идею)