在Java中拆分字符串,但在每个新字符串

时间:2017-09-09 17:18:16

标签: java arrays regex string split

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

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

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

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

如何在整个正则表达式或其他形式中实现这一目标?我还在学习Java中的Regex,所以我尝试了一些东西,例如:How to split a string, but also keep the delimiters?

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

我有这个分隔符:

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

然后这个方法:

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

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

任何人都可以帮助我吗?!!谢谢!

1 个答案:

答案 0 :(得分:1)

使用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