У меня есть строковая переменная, и я хочу извлечь из нее значение.

String LB0001 = "LB0001"; 
String[] splitString = LB0001.split("LB(.*)"); 

Я ожидал, что splitString будет содержать два значения, ["LB0001",["0001"]]. Однако результат нулевой. Зачем? Я проверил регулярное выражение и кажется правильным.

Я хочу извлечь «0001». Я могу сделать это другими способами, но хотел бы знать, что я здесь делаю не так.

0
Rory Lester 31 Дек 2015 в 14:06

2 ответа

Лучший ответ

Метод split будет разделяться в тех случаях, когда предоставленное регулярное выражение соответствует. В вашем случае выражение LB(.*) полностью соответствует предоставленной строке, поэтому вы ничего не получите обратно.

Если вы хотите получить числовую часть, вы можете разделить на все, что не является цифрой, например: .split("\\D"). В результате вы получите 1 элемент, содержащий 0001.

РЕДАКТИРОВАТЬ: если вы хотите что-нибудь после LB, вам нужно будет использовать классы Pattern и Matcher. В общем, примерно так:

String str = "LB0001";
Pattern p = Pattern.compile("LB(.*?)");
Matcher m = p.matcher(str);
while(m.find())
    System.out.println(m.groups(1));

Вышеупомянутое будет использовать регулярные выражения для поиска любого текста, следующего за LB. Я изменил его с .* на .*? на случай, если у вас есть что-то вроде этого: LB001LB333. Дополнительный ? делает выражение не жадным.

2
npinti 31 Дек 2015 в 11:36

Попробуй это

String LB0001 = "LB0001"; 
String[] splitStringAlpha = LB0001.split("[a-zA-Z]+");
System.out.println(splitStringAlpha[0]); 
String[] splitStringNum = LB0001.split("\\D");
System.out.println(splitStringNum[0]);

Это должно дать вам

LB
0001
0
AbtPst 31 Дек 2015 в 15:07