在 JAVA 中用分号标记拆分字符串

Split String with semicolon token in JAVA

我在尝试使用分号拆分字符串时遇到问题:

字符串是:

dsnSalarie;e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4; ;S21.G00.30.008;e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4;;;

带螺栓的分号是一个标记,不能被视为定界符,所以我尝试更改像“<;>”这样的字符串的定界符:

dsnSalarie<;>e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4<;> <;>S21.G00.30.008<;>e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4<;>;<;>

使用 StringUtils.split 或 StringTokenizer 我无法获取分号,即使使用“StringUtils.splitPreserveAllTokens”

我发现的唯一解决办法是用 space 包围分号,然后 trim 分号:

dsnSalarie<;>e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4<;> <;>S21.G00.30.008<;>e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4<;> ; <;>

谢谢你的想法。

我不太确定我明白了,但是下面的代码:

public class Test {
public static void main(String[] args) {
    String test="dsnSalarie<;>e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4<;> <;>S21.G00.30.008<;>e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4<;>;<;>";
    String[] split = test.split("<;>");
    for (String string : split) {
        System.out.println(string);
    }
}
}

产量

dsnSalarie
e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4
 
S21.G00.30.008
e3f5c7c0-5f5e-4579-a262-3fd87aafe1e4
;

分词器无法区分相同的字符,例如分号。如果有语义附加到;你需要像 ANTLR 这样的合适的解析器来制定你的语言,它可以从标记中推断出更高的顺序。