【发布时间】:2021-08-24 06:31:04
【问题描述】:
我想了解您将如何在 Java 中解析以下字符串。基本上,我想要文本“Begin-Data”和“End-Data”之间的所有内容
Begin-Data
abc
123
End-Data
【问题讨论】:
-
indexOf 和 substring 是一种很好的时尚方式。
-
请附上您迄今为止尝试过的内容。
我想了解您将如何在 Java 中解析以下字符串。基本上,我想要文本“Begin-Data”和“End-Data”之间的所有内容
Begin-Data
abc
123
End-Data
【问题讨论】:
单线解决方案使用String#replaceAll:
String input = "Begin-Data abc 123 End-Data";
String output = input.replaceAll("(?s).*\\bBegin-Data\\s+(.*?)\\s+End-Data\\b.*", "$1");
System.out.println(output); // abc 123
此答案假定输入字符串仅包含一次开始/结束标签 Begin-Data 和 End-Data。如果你有很多这样的标签,那么你应该使用正式的正则表达式模式匹配器:
String input = "Begin-Data abc 123 End-Data Begin-Data abc 345 End-Data";
String pattern = "(?s)\\bBegin-Data\\s+(.*?)\\s+End-Data\\b";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(input);
List<String> matches = new ArrayList<>();
while (m.find( )) {
matches.add(m.group(1));
}
System.out.println(matches); // [abc 123, abc 345]
【讨论】:
;-)