2016-04-30 2 views
1

Это моя входная строка:Разделить строку по достижению определенных символов в Java

Look - сделать ссылки (10) свежего яблока (9) Это компания Apple (7) возвращает пункт (6,8) в ноге (5)

Я хочу, чтобы разделить его на следующие части:

Look - to make links (10) 
fresh apple (9) 
This is Apple (7) 
returns para (6,8) 
in foot (5) 

Я попытался с помощью расщепления

string.split("("); 

но не работает.

Я думал об исключении всех «()» из строки, поэтому он будет иметь только цифры. Итак, как разбить и подтолкнуть его к новой строке, если она содержит цифру, а затем пробел? Для экс:

yy, 2009 Look - to make links 

тогда, линия "Look - to make links" должна прийти в следующей строке, как есть цифра с последующим пробелом.

ПРИМЕЧАНИЕ. Я хочу начать чтение и управление строкой только с «2009». то есть. Строка «Look - to make links» должна быть первой строкой. Строка динамическая. Таким образом, я не могу рассчитывать на основе индекса.
Любая идея, как это сделать?

+0

Итак, вы хотите, чтобы удалить все, прежде чем '2009' (включительно), расщеплять до двух' (', и удалить слово' surrounded'? Похоже, работа для совпадения с регулярным выражением. Вы должны знать, как для выполнения регулярных выражений. – Andreas

+1

BTW: 'string.split (" (")' не работает, потому что аргумент является регулярным выражением и '(' имеет особое значение в регулярном выражении. Вам следует научиться делать регулярные выражения. – Andreas

+0

Да, я хочу удалить все до 2009 года и напечатать новую строку, если строка содержит пробел, за которым следует '(' @Andreas – Anusha

ответ

1

Это трудно сказать, но мне кажется, что это может быть то, что вы хотите:

String[] lines = str.split("(?<=\\))"); 

Это раскалывает после каждой закрывающей скобки, сохраняя близкий кронштейн. Регулярное выражение выглядит позади, которое имеет форму (?<=...), для скобки (буквально). Посмотрите вперед/назад - это утверждения с нулевой шириной - поэтому они не потребляют никакого ввода; важно, когда вам нужно разделить, но не потерять исходный контент.

+0

Большое спасибо. Не могли бы вы объяснить, что делает этот код? Я не знаком с regex @Bohemian – Anusha

+0

@Anusha FYI Я добавил объяснение – Bohemian

0

Регулярное выражение Ануши оставляет пробелы перед выходом 4/5. Вы можете добавить .trim(), чтобы удалить их!

Вот еще один вариант. Это манипуляция строк «грубой силы», которая никогда не бывает очень красивой.

String str = "Look - to make links (10) fresh apple (9)" + 
      " This is Apple (7) returns para (6,8) in foot (5)"; 

    int startIndex = 0; 
    int endIndex = str.indexOf(")")+1; 
    while(endIndex < str.length()) 
    { 
     System.out.println(str.substring(startIndex, endIndex)+"\n"); 
     startIndex = endIndex+1; 
     endIndex = str.indexOf(")",startIndex)+1; 
    } 
+0

Спасибо большое! Он работает tioo !! Можете ли вы объяснить, что такое regex str.split ("(? <= \\))"); делать ? @Laszlo – Anusha

+0

@Anusha str.split ("(? <= \\))") приведет к массиву, где [0] выглядит идеально, но [1] - [4] имеют пробел в качестве своего первого символа, за которым следует строка, запрошенная OP. Это очень, очень близко, и для обрезки этого ведущего пространства нужно использовать только .trim(), чтобы обрезать его. Требования OP не отображали лишнего ведущего места. Ой!! И, пожалуйста, простите меня, я добавил \ n в свой println() на основе вопроса ПЕРЕД правки, которые, похоже, удалили пустые строки в выходном файле. упс! – Laszlo

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