在Java中标记字符串

在Java中标记字符串,java,string,tokenize,Java,String,Tokenize,我有一根绳子 a-b-c a---c 然后我想用字符“-”标记字符串,结果是 [a, b, c] 但我有一根绳子 a-b-c a---c 结果应该是 [a, -, c] Java中已经有一个标记器可以做到这一点吗?这(第一次尝试)似乎可以按要求处理您的示例 String rex = "(?<=-)-(?=\\w)|(?<=\\w)-(?=-)|(?<=\\w)-(?=\\w)"; String[] t1 = s1.split( rex ); String rex=

我有一根绳子

a-b-c
a---c
然后我想用字符“-”标记字符串,结果是

[a, b, c]
但我有一根绳子

a-b-c
a---c
结果应该是

[a, -, c]
Java中已经有一个标记器可以做到这一点吗?

这(第一次尝试)似乎可以按要求处理您的示例

String rex = "(?<=-)-(?=\\w)|(?<=\\w)-(?=-)|(?<=\\w)-(?=\\w)";
String[] t1 = s1.split( rex );

String rex=“(?我将假设您的分隔符始终是一个连字符,
--
将拆分为
[-,-]
--
将无效或拆分为
[-,-]
。在这种情况下,以下内容适用于您:

private static List<String> tokenize(String input, char delimeter) {
    List<String> result = new ArrayList<String>();
    StringBuilder builder = new StringBuilder();

    for (char c : input.toCharArray()) {
        if (builder.length() == 0) {
            builder.append(c);
        } else if (c == delimeter) {
            result.add(builder.toString());
            builder.setLength(0);
        } else {
            builder.append(c);
        }
    }

    if (builder.length() > 0) {
        result.add(builder.toString());
    }

    return result;
}
印刷品:

[a, b, c] [a, -, c] [甲、乙、丙] [a,-,c]
这是一个仅使用regexp为您的测试数据提供所需结果的解决方案:

\b-|-\b

单词边界(
\b
)的可能性经常被低估,但可以大大简化许多正则表达式

通过提供的regexp,您现在可以使用Javas
split
方法

public class SimpleRegExp {
    public static void main(String[] args) {
        String regexp = "\\b-|-\\b";
        System.out.println(Arrays.toString("a-b-c".split(regexp)));
        System.out.println(Arrays.toString("a---c".split(regexp)));
    }
}
并打印此结果:

[a, b, c]
[a, -, c]

是的!有一个字符串标记器StringTokenizer是一个遗留类(现在适用于多个Java版本),不应再使用它。请使用正则表达式或字符串的拆分方法。另一个可能的结果是
[a--,c]
。总是用连字符分隔一个字符的值吗?我们需要一些规则来避免不明确的结果。如果字符串的整体结构是固定的,您真的应该使用适当的。string.split以正则表达式作为参数。您尝试过myString.split(“-+”)吗?---c“分为a,-,b,这可能是你想要的,也可能不是。