Должен разделить строку на две части в Java

У меня есть строка, которая содержит непрерывный блок цифр и затем непрерывный блок символов. Я должен разделить их на две части (одна целая часть и одна строка).

Я пытался использовать String.split("\\D", 1), но это съедает первый символ. Я проверил всю Строку API и не нашел подходящий метод.

Есть ли какой-либо метод для того, чтобы сделать эту вещь?

6
задан Reddy 29 October 2012 в 19:20
поделиться

2 ответа

Используйте поисковые пути: str.split ("(? <= \\ d) (? = \\ D)")

String[] parts = "123XYZ".split("(?<=\\d)(?=\\D)");
System.out.println(parts[0] + "-" + parts[1]);
// prints "123-XYZ"

\ d - класс символов для цифр; \ D - его отрицание. Таким образом, это утверждение о совпадении нуля соответствует позиции, где предыдущий символ является цифрой (? <= \ D) , а следующий символ не является цифрой (? = \ D) .

Ссылки

Связанные вопросы


Альтернативное решение с использованием ограниченного разделения

Также работает следующее:

    String[] parts = "123XYZ".split("(?=\\D)", 2);
    System.out.println(parts[0] + "-" + parts[1]);

Это разделение происходит непосредственно перед тем, как мы увидим нецифровую . Это намного ближе к вашему исходному решению, за исключением того, что поскольку оно фактически не соответствует нецифровому символу, оно не «съедает» его. Кроме того, он использует ограничение из 2 , что вам и нужно.

Ссылки API

  • String.split (String regex, int limit)
    • Если предел n больше нуля, то шаблон будет применяться не более n - 1 раз, длина массива будет не больше, чем n , а последняя запись массива будет содержать все входные данные за последним совпавшим разделителем.
14
ответ дан 8 December 2019 в 13:44
поделиться

Всегда есть старый добрый способ:

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)};
}

(надеюсь, он работает и со строками, состоящими только из цифр или символов - не могу проверить это здесь - если нет, примите это как общую идею)

3
ответ дан 8 December 2019 в 13:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: