首页 > 解决方案 > 拆分分隔符java

问题描述

我在stackoverflow中搜索时找到了答案,它工作得很好但是当我看到用户没有解释代码是如何工作的评论时,有人可以向我解释这段代码是什么意思吗?...

String input =
      "        [John, 8, 9, 10, \r\n"
    + "       , Peter, 10, 8, 7, \r\n"
    + "       , Steve, 8, 9, 6, \r\n"
    + "         ]";
String output = input.replaceAll("(?m)^[\\s,\\[]+|[\\s,\\]]+$|[\\s&&[^\r\n]]+", "");
System.out.println(output);

标签: javasplitdelimiter

解决方案


从评论中回答您的问题:

"[\s&&[^\r\n]]+" 这是我完全不理解的部分,我不明白逗号消失的地方,而 is nocomma 分隔符,只有括号分隔符" – Jansen Stanlie

我将忽略字符串转义并将其写为真正的正则表达式。在正则表达式的 java 风格中,您可以使用以下方法进行类交集和减法:

[..&&[..]][..&&[^..]分别。将 .. 替换为您的角色类别和包含/排除范围。

例如

[az&&[^aeiou]]会给你一个不是元音的英文小写字母。

因此,在您的示例中(删除 java 字符串转义) [\s&&[^\r\n]] - \s 任何空白字符,\r 或 \n 除外。这样做是为了消除所有空格但保留换行符。

这也可以写为 [\s&&[\V]],这将使其符合 Unicode。\V 是任何不是垂直空格的字符。

关于逗号删除位置的问题:此处删除了前导逗号:

(?m)^[\\s,\\[]+|[\\s,\\]]+$|[\\s&&[^\r\n]]+
         ^

和尾随:

(?m)^[\\s,\\[]+|[\\s,\\]]+$|[\\s&&[^\r\n]]+
                    ^

推荐阅读