【问题标题】:How to parse this string in Java如何在Java中解析这个字符串
【发布时间】:2021-08-24 06:31:04
【问题描述】:

我想了解您将如何在 Java 中解析以下字符串。基本上,我想要文本“Begin-Data”和“End-Data”之间的所有内容

Begin-Data
abc
123
End-Data

【问题讨论】:

  • indexOf 和 substring 是一种很好的时尚方式。
  • 请附上您迄今为止尝试过的内容。

标签: java string parsing


【解决方案1】:

单线解决方案使用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-DataEnd-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]

【讨论】:

  • @ScaryWombat 我的假设是 OP 只需要一对标签。在您上面输入的情况下,我们应该使用正式的模式匹配器 q.v。我更新的答案。
  • 正则表达式之王 - 被否决的机会
  • 实际上 Wiktor Stribiżew 是该网站 AFAIK 上的历史正则表达式之王。我确实在正则表达式标签上得到了几点,当他睡觉时;-)
  • 是的,当他醒着时,我从不尝试回答正则表达式。
  • 感谢大家的意见。我会尝试不同的方法,看看效果如何。这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多