2015-02-01 2 views
3

Я пытаюсь разбить строку на дефис и символ, но не знаю, как использовать split с Regex. Строка заключается в следующем:Java split by dash character

-u -p 12345 Том -h google.com

дефис и символ являются взаимозаменяемыми в положении, и сколько из них может появиться. Я бы хотел, чтобы они возвращались в массив. Вот то, что я до сих пор:

Scanner reader = new Scanner(System.in); 
String entireLine = reader.nextLine(); 
String[] array = entireLine.split("–", -1); 

В результате я хотел бы это:

-u Тома

-p 12345

-h google.com

Благодарю.

+2

это не самый лучший способ для разбора параметров командной строки; загляните в какую-нибудь библиотеку, такую ​​как jargs. –

+0

Мне просто нужна была быстрая вещь, связанная с HW. Не касается его полировки. Просто получить результат. – AzzamAziz

+1

Что делать, если пользователь вводит дефисы: -u peter-p -p pass-word -h my-domain.com http://stackoverflow.com/questions/367706/is-there-a-good-command-line-argument -parser-for-java –

ответ

6

Попробуйте это:

String[] array = entireLine.split("(?<!^)(?=-)"); 

Отрицательный взгляд за предотвратит расщепление в начале строки.

+0

Точно, что я искал, чтобы игнорировать первый. Спасибо! – AzzamAziz

1

Метод split берет регулярное выражение в параметре, так что вы можете использовать положительный предпросмотр нравится эта

String[] array = entireLine.split("(?=-)"); 

У вас есть большое объяснение этого в аналогичный вопрос к вашему: How to split String with some separator but without removing that separator in Java?

+0

Не работает, к сожалению. – AzzamAziz

+0

@AzzamAziz Почему бы и нет? Я попробовал вход '-a b -c d', и он возвращает' -a b' и '-c d'. Разве это не то, что вы хотите? –

+0

Это сработало после того, как я сменил своего персонажа. Я использовал неправильный. – AzzamAziz

2

Я хотел бы использовать следующее:

String[] array = entireLine.split("\\-", -1); 
// or 
String[] array = entireLine.split("\\–", -1); 

Это даст вам

у Тома

р 12345

ч google.com

+0

Это не работает так, как хочет пользователь. –

+0

Это вообще не работает. Уже пробовал это. – AzzamAziz

+0

@AzzamAziz Потому что ваши дефисы '-', а не' -', http://ideone.com/5Upivl – mrres1

0

Вы можете попробовать это:

String[] array = entireLine.split("-*(\\s+)");