2017-02-06 6 views
1

Я использую функцию «раскол» на эту строку:Java расколоть возвращает пробелы в результате

p(80,2) 

Я хотел бы получить только два числа, так это то, что я делаю:

String[] split = msg.msgContent().split("[p(,)]") 

Регулярное выражение правильное (или, по крайней мере, я так думаю), поскольку оно разбивает два числа и помещает их в вектор «split», но оказывается, что этот вектор имеет длину 4, а первые два позиции заняты пробелами.
В самом деле, если я печатаю каждый вектор позиции, это результат:

Split: 


80 
2 

Я попытался добавить \\ s в регулярное выражение для соответствия с пробелами, но так как нет ни в моей строке, это не сработало.

+1

1. regex неверно для разделения 2. Не следует использовать split – anubhava

+0

@anubhava w Я должен использовать вместо разделения? – User999

+1

Примечание: это не белые пробелы. Это пустые строки. Существует пустое жало между началом строки и 'p' и пустая строка между символами' p' и '('. – RealSkeptic

ответ

3

Вам не нужно split здесь, просто использовать простое регулярное выражение для извлечения цифр из вашей строки:

Pattern p = Pattern.compile("\\d+"); 
Matcher m = p.matcher(msg.msgContent()); 
while (m.find()) { 
    String number = m.group(); 
    // add to array 
} 

Обратите внимание, что String#split принимает регулярное выражение, и регулярное выражение вы прошли не соответствует шаблону, который вы ищете.

Возможно, вы захотите прочитать documentation из Pattern и Matcher для получения дополнительной информации о решении выше.

2

split принимает регулярное выражение как параметр, и это класс символов: [p(,)].

Учитывая, что ваш код разделив на всех символов в классе:

"p(80,2)" возвращает массив {"", "80", "2"}

Я знаю, что это не очень красиво:

List<String> collect = Pattern.compile("[^\\d]+") 
           .splitAsStream(s) 
           .filter(s -> s.length() > 0) 
           .collect(Collectors.toList()); 
1

Поскольку вы разбиваете на p и (, первые два символа вашей строки приводят к разрыву. Я разделил бы запятую после замены p, ( и ). Как это:

String x = "p(80,2)"; 
String [] y = x.replaceAll("[p()]", "").split(","); 
0

Сплит это не совсем то, что вам нужно, но если вы хотите использовать его, вы можете сделать что-то подобное:

"p(80,2)".replace("p(", "").replace(")", "").split(",") 

Результаты с

[80 , 2]

 Смежные вопросы

  • Нет связанных вопросов^_^