java - 拆分字符串不包含 java 中的字符串

标签 java arrays regex string split

我如何使用 split-cretiria 拆分下面的文本:首先,现在,然后:

String text = "FIRST i go to the homepage NOW i click on button \"NOW CLICK\" very quick THEN i will become a text result.";

预期是三个句子:

  1. 首先我去主页
  2. 现在我很快点击按钮“NOW CLICK”
  3. 然后我将成为一个文本结果。

此代码不起作用,因为按钮“现在单击”

String[] textArray = text.split("FIRST|NOW|THEN");

最佳答案

如果我没理解错你

  • 想要根据关键字FIRST NOW THEN 分隔文本并将它们保留在结果部分
  • 但如果这些关键字出现在引号内,则不想拆分它们。

如果我的猜测是正确的而不是 split 方法,您可以使用 find 遍历所有

  • 引述
  • 不在引号内的单词,
  • 空格。

这将使您可以将所有引号和空格添加到结果中,并只专注于检查不在引号内的单词,看看您是否应该拆分它们。

表示这些部分的正则表达式可以类似于 Pattern.compile("\"[^\"]*\"|\\S+|\\s+");

重要:我们需要先搜索“..”,否则 \\S+ 也会匹配 "NOW CLICK " 作为 "NOWCLICK" 作为两个独立的部分,这将防止它被视为单引号。这就是为什么我们要在 subregex1|subregex2|subregex3 系列的开头放置 "[^"]*" 正则表达式(代表引号)。

这个正则表达式将允许我们遍历文本

首先我转到主页现在我很快点击按钮“NOW CLICK”然后我将变成一个文本结果。

作为代币

第一个 开始 首页 现在 点击 开启 按钮 “现在点击” 非常 快速 然后 成为 一个 文本 结果。 然后 成为 一个 文本 结果。

请注意,"NOW CLICK" 将被视为单个 标记。因此,即使它包含您要拆分的内部关键字,它也永远不会等于这样的关键字(因为它会包含其他字符,例如 ",或者只是引号中的其他词。这将防止它被视为定界符,在其上拆分文本。

使用这个想法,我们可以创建如下代码:

String text = "FIRST i go to the homepage NOW i click on button \"NOW CLICK\" very quick THEN i will become a text result.";
List<String> keywordsToSplitOn = List.of("FIRST", "NOW", "THEN");

//lets search for quotes ".." | words | whitespaces
Pattern p = Pattern.compile("\"[^\"]*\"|\\S+|\\s+");
Matcher m = p.matcher(text);

StringBuilder sb = new StringBuilder();
List<String> result = new ArrayList<>();
while(m.find()){
    String token = m.group();
    if (keywordsToSplitOn.contains(token) && sb.length() != 0){
        result.add(sb.toString());
        sb.delete(0, sb.length());//clear sb
    }
    sb.append(token);
}
if (sb.length() != 0){//include rest of text after last keyword 
    result.add(sb.toString());
}

result.forEach(System.out::println);

输出:

FIRST i go to the homepage 
NOW i click on button "NOW CLICK" very quick 
THEN i will become a text result.

关于java - 拆分字符串不包含 java 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62686321/

相关文章:

java - getWriter() 如何在 HttpServletResponse 中发挥作用?

TDD session 期间出现 java.lang.AssertionError

c - 在C中将格式化文件读入char数组

Python 在 Apache 日志文件中搜索 IP 数量

java - 遵循 arquillian-graphene 指南的问题

java - Java 中的 H2(嵌入式)数据库 - StackOverflowError

java - 三元组的最大值和最小值

regex - 如何编写正则表达式以仅匹配模式末尾的一位数字?

javascript - url 检测正则表达式

java - 执行程序服务的并发数组访问