2015-05-16 2 views
1

У меня есть простая строка XML, которую я хочу разделить с помощью String.split(), но она не работает должным образом.Сплит сложная строка с разделителями в Java

(<)position x="1" y="2" z="3" /(>) with no parentesis 

Вот регулярное выражение я попытался применить:

String regex ="(<)position x=\"|\" y=\"|\" z=\"|\" /(>)"; 

Ожидаемый результат

+0

Какая у вас строка ввода? Каков ожидаемый результат? Каков результат, который вы получаете? Просьба уточнить. – pathfinderelite

+0

Вы становитесь теплее. Однако, пожалуйста, задайте вопрос. Раздел комментариев предназначен для того, чтобы пользователи запрашивали разъяснения. В качестве части вопроса должны быть добавлены сами разъяснения. Благодарю. – pathfinderelite

ответ

1

Вы не можете сделать это с split() способ. Он будет только разделять строку на куски, она не будет отфильтровывать отдельные группы. Вместо этого, вы можете использовать Pattern и Matcher классы

final String input = "<position x=\"1\" y=\"2\" z=\"3\" />"; 
final String regex = "<position\\sx=\"([0-9]+)\"\\sy=\"([0-9]+)\"\\sz=\"([0-9]+)\"\\s\\/>"; 
final Pattern pattern = Pattern.compile(regex); 
final Matcher matcher = pattern.matcher(input); 
if (matcher.matches()) { 
    final String x = matcher.group(1); 
    final String y = matcher.group(2); 
    final String z = matcher.group(3); 
    System.out.println(x + " " + y + " " + z); 
} 

Однако, если вы планируете на разборе XML, я бы высоко предлагают с помощью XML-парсер вместо этого.

+0

Большое спасибо. Но означает ли [0-9], что он будет фильтровать только числа от 0 до 9? x, y, z могут быть удвоены. – aesine

+0

@aesine Да, но вы можете использовать '[0-9 \\.]', Если вы хотите включить десятичное число. Однако, если вы знакомы с регулярными выражениями, вы могли бы подумать об этом сами :). Regex - чрезвычайно ценный инструмент для почти любого разработчика, поэтому стоит потратить время на изучение. (Именно там с синтаксическими анализаторами XML). – pathfinderelite

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