首页 > 解决方案 > 将 StringTokenizer 与逗号分隔符一起使用,同时保持逗号前面有反斜杠

问题描述

考虑以下字符串:

String str = XFB_PART~,XFB_IDF~,XFB_MODE~0,XFB_LOCALITEM~,XFB_REMOTEITEM~,XFB_MSG~keep,/this/,comma,ASYNCHRONOUS~0,BROADCAST~0,XFB_LOCALAGT~,XFB_SUSER~,XFB_RUSER~,XFB_FILE_NAME~,XFB_SAPPL~,XFB_RAPPL~,XFB_IDA~,XFB_MAXDURATION~000000

这里的想法是使用逗号作为分隔符,但同时忽略由反斜杠分隔的逗号。

所以当我这样做时:

propsToken = new StringTokenizer(str, ",");

我应该将其作为令牌之一接收:

XFB_MSG~keep,this,comma  (because there was a backslash preceding it)

这是我所做的:

String str = XFB_PART~,XFB_IDF~,XFB_MODE~0,XFB_LOCALITEM~,XFB_REMOTEITEM~,XFB_MSG~keep,\this\,comma,ASYNCHRONOUS~0,BROADCAST~0,XFB_LOCALAGT~,XFB_SUSER~,XFB_RUSER~,XFB_FILE_NAME~,XFB_SAPPL~,XFB_RAPPL~,XFB_IDA~,XFB_MAXDURATION~000000


String strWithComma = "";


    if (StringUtils.isNotEmpty(str) && str.contains("\,")){

        strWithComma = Arrays.toString(str.split("(?<!\\)),"));
        propsToken = new StringTokenizer(strWithComma, "");
    } else {
        propsToken = new StringTokenizer(str, ",");
    }

但是输出是空的。我的正则表达式不正确吗?我希望它根据分隔符“,”拆分这些标记,除了那些在逗号前有反斜杠的标记,我希望它们再次显示而没有反斜杠但仍然带有逗号。

标签: javaregexstringtokenizer

解决方案


推荐阅读