繁体   English   中英

在Java中拆分字符串,但在每个新字符串中保留定界符

[英]Split a string in Java, but keep the delimiters inside each new string

我似乎找不到这个答案。 我想做的是在Java中拆分一个字符串,但是我想在每个字符串中保留定界符。 例如,如果我有以下字符串:

word1{word2}[word3](word4)"word5"'word6'

新字符串数组必须是这样的:

["word1", "{word2}", "[word3]", "(word4)", "\"word5\"", "\'word6\'"]

如何在正则表达式或其他形式中实现这一目标? 我仍在学习Java正则表达式,因此我尝试了一些操作,例如此处讨论的内容: 如何拆分字符串,但还要保留定界符?

但我没有得到预期的结果。

我有这个定界符:

static public final String WITH_DELIMITER = "((?<=%1$s)|(?=%1$s))";

然后这个方法:

private String[] splitLine() { return tokenFactor.split(String.format(WITH_DELIMITER, "\\(|\\)|\\[|\\]|\\{|\\}|\"|\'")); }

但是该代码将分隔符拆分为单个字符串,这不是我想要的

谁能帮帮我吗?!! 谢谢!

使用Patternregex解决方案:

我将单独捕获每个单词,或者捕获String前后带有一个元素的单词

String str = "word1{word2}[word3](word4)\"word5\"'word6'";
Matcher m = Pattern.compile("(([{\\[(\"']\\w+[}\\])\"'])|(\\w+))").matcher(str);
List<String> matches = new ArrayList<>();

while (m.find())
    matches.add(m.group());

String[] matchesArray = matches.toArray(new String[0]);
System.out.println(Arrays.toString(matchesArray));

我给出了将其放入数组的方法,但是您可以停止使用列表

Regex demo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM