Как разбить строку, не потеряв ни слова?

1

Я использую Eclipse для Java, и я хочу разбить строку ввода без потери каких-либо символов.

Например, строка ввода:

IPOD6 1 USD6IPHONE6 16G,64G,128G USD9,USD99,USD999MACAIR 2013-2014 USD123MACPRO 2013-2014,2014-2015 USD899,USD999

и желаемый выход:

IPOD6 1 USD6
IPHONE6 16G,64G,128G USD9,USD99,USD999
MACAIR 2013-2014 USD123
MACPRO 2013-2014,2014-2015 USD899,USD999

Я использовал split("(?<=\\bUSD\\d{1,99}+)") но он не работает.

  • 0
    Не могли бы вы вместо этого использовать сканер? Я чувствую, что было бы намного проще использовать этот подход.
  • 0
    Вы хотите разделить ввод на массивы или просто добавить новые строки, если это возможно?
Теги:
string
split

2 ответа

1
Лучший ответ

Вам просто нужно добавить границу без слов \B внутри положительного внешнего вида. \B совпадает между двумя символами без слова или между двумя символами слова. Он не будет разделен на границе, которая существует между USD9 и запятой в этом USD9, подстрока, потому что это слово граничных выходами между USD9 и запятой с 9 является символом слова и , не является символом слова. Он расщепляется на границе, которая существует между USD6 и IPHONE6 потому что между этими подстроками существует граница не-слов \B так как 6 является символом слова, а I также является символом слова.

String s = "IPOD6 1 USD6IPHONE6 16G,64G,128G USD9,USD99,USD999MACAIR 2013-2014 USD123MACPRO 2013-2014,2014-2015 USD899,USD999";
String[] parts = s.split("(?<=\\bUSD\\d{1,99}+\\B)");
for(String i: parts)
{
    System.out.println(i);
}

Вывод:

IPOD6 1 USD6
IPHONE6 16G,64G,128G USD9,USD99,USD999
MACAIR 2013-2014 USD123
MACPRO 2013-2014,2014-2015 USD899,USD999
1

не делая этого слишком сложным, используйте этот шаблон

(?=IPOD|IPHONE|MAC)

и заменить новой строкой
теперь его легко захватывать или разбивать на массив
демонстрация


или, может быть, этот шаблон

((USD\d+,?)+)

и заменим w/$1\n
демонстрация

Ещё вопросы

Сообщество Overcoder
Наверх
Меню