【问题标题】:How to split a string by keywords in Java [duplicate]如何在Java中按关键字拆分字符串[重复]
【发布时间】:2019-01-31 14:53:13
【问题描述】:

我需要根据我创建的关键字或分隔符列表拆分输入并将其放入列表中。

我试过简单地用空格分割字符串,然后再处理它,但问题是我的一些关键字中有空格,所以它们被分开,导致不希望的行为。

// "Jr.", "III", "Sr", "pro se" are all keywords in my list
String input = "Abraham Lincoln Jr. III Sr pro se";
String [] splitBySpace = input.split(" ");
List<String> separatedName = new ArrayList<>(Arrays.asList(splitBySpace);

我的列表最终是:{Abraham, Lincoln, Jr., III, Sr, pro, se} 我希望它是:{Abraham, Lincoln, Jr., III, Sr, pro se} 此输出也可以:{Abraham Lincoln, Jr., III, Sr, pro se}(我不需要将不在分隔符列表中的字符串分开)

【问题讨论】:

  • split() 中使用正则表达式并查看stackoverflow.com/questions/12636417/…
  • // "Jr.", "III", "Sr", "pro se" are all keywords in my list。你能显示你的列表的内容吗?
  • 除非您提供问题的所有详细信息,否则您不能期望在这里获得帮助。

标签: java regex split matcher


【解决方案1】:

您可以使用这个:\s(?=(Jr\.|III|Sr|pro se)) - 并添加您要保留的关键字。

这是一个工作演示,看看它匹配什么:https://regexr.com/47gbm

所以使用String[] split = input.split("\\s(?=(Jr\\.|III|Sr|pro se))"); 你应该得到想要的结果。

【讨论】:

  • 我的分隔符列表很长,所以我可以在正则表达式中使用字符串变量,而不是在 Jr\\.|III|Sr|pro se|...
  • 当然可以。但它不是很漂亮也不是很高效。如果它是一次性过程并且性能不重要,那可能没问题。
  • 会是这样吗:String[] split = input.split("\\s(?=(regex))");
【解决方案2】:

您可以尝试在包含关键字的字符串中添加不同的分隔符。用" " 分隔它们,用"|" 分隔它们。

String input = "Abraham|Lincoln|Jr.|III|Sr|pro se";
String [] splitByPipe = input.split("\\|");

这样,您需要保留的空间不会有任何问题。

【讨论】:

  • 但要做到这一点,您必须知道您的关键字在目标字符串中的位置。和以前一样的问题,不是吗?
猜你喜欢
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
  • 2018-03-29
  • 2017-07-22
  • 2023-03-23
  • 1970-01-01
  • 2020-10-03
  • 1970-01-01
相关资源
最近更新 更多