Извлечь строку между тегами в Java - PullRequest
0 голосов
/ 25 июня 2018

У меня есть строка, как показано ниже

Msg_Begin
Some message1
Msg_End
Msg_Begin
Some message2
Msg_End
Msg_Begin
Some message3
Msg_End

И я хочу получить сообщение между Msg_Begin и Msg_End в списке, как

[Some message1, Some message2, Some message3]

что является лучшим подходом для этого в Java.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

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

//Filling Your test case and print
String entry = "Msg_Begin\r\n" + 
               "Some message1\r\n" + 
               "Msg_End\r\n" + 
               "Msg_Begin\r\n" + 
               "Some message2\r\n" + 
               "Msg_End\r\n" + 
               "Msg_Begin\r\n" + 
               "Some message3\r\n" + 
               "Msg_End";

System.out.println("IN : \r\n" + entry) ;

//Compile the regular expression patern, providing the DOTALL flag to enable mutiline matches
Pattern p = Pattern.compile("Msg_Begin\r\n(.+?)\r\nMsg_End(\r\n)?", Pattern.DOTALL) ;  
Matcher m = p.matcher(entry) ; 

// iterate over results (for exemple add them to a list)
System.out.println("\r\nOUT :") ;
List<String> list = new ArrayList<>();
while (m.find()) {
    list.add( m.group(1));
    System.out.println(m.group(1)) ;
}

Дать следующий результат:

IN : 
Msg_Begin
Some message1
Msg_End
Msg_Begin
Some message2
Msg_End
Msg_Begin
Some message3
Msg_End

OUT :
Some message1
Some message2
Some message3

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

0 голосов
/ 25 июня 2018
String messages = originalString.replaceAll("Msg_Begin","");
String[] array = messages.split("Msg_End");
return Arrays.asList(array);

Просто убедитесь, что ваши сообщения не содержат Msg_Begin или Msg_End.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...