在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,您现在可以使用Javassplit
方法
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,这可能是你想要的,也可能不是。