Получение подстрок между тегами - PullRequest
1 голос
/ 22 июля 2011

Я прочитал несколько вопросов о разборе строки по тегам, но я не нашел точного ответа для моей конкретной проблемы. Проблема: У меня большая строка текста. Мне нужно разобрать эту строку на несколько, основываясь на тегах.Пример: я нахожу [tag] , затем читаю текст до [tag] и получаю его в новой строке.Затем я читаю текст до того, как появится тот же [tag] , и публикую эти данные в новой строке и т. Д.

Пример: [tag] Lorem Ipsum [tag] - просто фиктивный текст индустрии печати и набора текста.Лорем Ипсум был стандартным манекенщиком в отрасли с 1500-х годов, когда неизвестный принтер взял набор шрифтов и скремблировал его, чтобы сделать книгу типовых образцов. [tag] Он [tag] пережил не только пять веков, но и скачок в электронном наборе текста, оставшись практически неизменным.Он был популяризирован в 1960-х годах с выпуском листов Letraset, содержащих отрывки Lorem Ipsum, и совсем недавно с программным обеспечением для настольных издательских систем, таким как Aldus PageMaker, включая версии Lorem Ipsum.

Я хочу три строки на основе этого текста: Lorem Ipsum, текст между этим

Ответы [ 3 ]

1 голос
/ 22 июля 2011
String txt = "[tag] Lorem Ipsum [tag] is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. [tag] It has [tag] survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.";

int index = -1;
while (true)
{
    int i = txt.indexOf("[tag]", index+1);
    if (i == -1) break;
    if (index == -1)
    {
        index = i;
    } else
    {
        System.out.println(txt.substring(index + 5, i));
        index = i;
    }

}
1 голос
/ 22 июля 2011

Регулярные выражения на помощь!

LinkedList<String> matches = new LinkedList<String>();
Pattern pattern = Pattern.compile("\\[tag\\].*?\\[tag\\]");
Matcher matcher = pattern.matcher(str);

while(matcher.find())
    matches.add(matcher.group());

В качестве альтернативы вы можете просто пройти через строку вручную.

int index = -1;

while( str.indexOf("[tag]",index+1) != -1 ) {
    String s = str.substring( index = str.indexOf("[tag]",index+1)+5, index = str.indexOf("[tag]",index) );
    System.out.println(s);
}
0 голосов
/ 22 июля 2011

Использовать метод разбиения класса String.Ожидается регулярное выражение в качестве параметра:

String allText = "some[tag]text[tag]separated[tag]by tags";
String[] textBetweenTags = allText.split("\\[tag\\]");
for (int i = 0; i < textBetweenTags.length; i++) {
    System.out.println(textBetweenTags[i]);
}
...