Нужно разбить строку на две части в Java - PullRequest
6 голосов
/ 08 июня 2010

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

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

Есть ли способ сделать это?

Ответы [ 2 ]

13 голосов
/ 08 июня 2010

Используйте 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).

Ссылки

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


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

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

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

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

API ссылки

  • String.split(String regex, int limit)
    • Если предел n больше нуля, то шаблон будет применен не более n - 1 раз, длина массива не будет превышать n, а последняя запись массива будет содержать все входные данные, кроме последнего согласованный разделитель.
3 голосов
/ 08 июня 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...