StringUtils 或任何库类方法来保留分隔符[重复]

Posted

技术标签:

【中文标题】StringUtils 或任何库类方法来保留分隔符[重复]【英文标题】:StringUtils or any library class method to preserve the delimiter [duplicate] 【发布时间】:2017-04-07 11:09:48 【问题描述】:

我有一个字符串“role1@role2@role3@role4$arole”,用分隔符@ 和$ 分隔。我用下面的java代码

String str = "role1@role2@role3@role4$arole";
        String[] values = StringUtils.splitPreserveAllTokens(str, "\\@\\$");

        for (String value : values) 
            System.out.println(value);
        

得到了结果

role1
role2
role3
role4
arole

但我的要求是在结果中保留分隔符。所以,结果必须符合要求

role1
@role2
@role3
@role4
$arole

我分析了 apache commons StringUtils 方法来做到这一点,但找不到任何线索。

任何库类可以获得上述预期结果?

【问题讨论】:

【参考方案1】:

您可以使用简单的split 并具有积极的前瞻性:

String str = "role1@role2@role3@role4$arole";
String[] res = str.split("(?=[@$])");
System.out.println(Arrays.toString(res));
// => [role1, @role2, @role3, @role4, $arole]

见Java demo

(?=[@$]) 正则表达式匹配字符串中的任何位置,该字符串后跟@$ 符号(注意$ 不必在@987654328 内转义@字符类)。

【讨论】:

以上是关于StringUtils 或任何库类方法来保留分隔符[重复]的主要内容,如果未能解决你的问题,请参考以下文章

org.apache.commons.lang.StringUtils的jar包是啥

Java list 转字符串并加入分隔符的方法

Symfony 3 - 组织存储库类和功能

StringUtils.isEmpty和StringUtils.isBlank的区别

保留字符串中的分隔标记列表[关闭]

将 List 转换为 String