提取 Java 中标签之间的字符串

Extract string between the tags in Java

我有如下字符串

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

并希望将 Msg_BeginMsg_End 之间的消息添加到列表中 喜欢

[Some message1, Some message2, Some message3]

Java 中对此的最佳方法是什么。

var messages = originalString.replaceAll("Msg_Begin", "");
var array = messages.split("Msg_End");
return Arrays.asList(array);

请确保您的消息不包含 Msg_BeginMsg_End

您可以使用正则表达式来实现:

//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

可以找到有关正则表达式语法的更多信息 here