给出一个像
这样的单行字符串a b c d => e f g 1 2
使用双分隔符(space
和=>
)模式
" +( +|\\=> *)?"
在String.split()
中生成以下9个字段作为Java
的输出:
a, b, c, d, e, f, g, 1, 2
但是,如果输入字符串使用“1M”之类的符号表示数字“1百万”,即
a b c d => e f g 1 m 2
m
是额外的字段)。
可以修改模式,使1
和m
可以1 m
String.split()
中的{{1}}可靠地组合在一起,其他一切都是相同的吗?
答案 0 :(得分:2)
根据=>
或m
之后的空格分割输入。
String s = "a b c d => e f g 1 m 2";
String[] parts = s.split("\\s*=>\\s*|\\s+(?!m)");
System.out.println(Arrays.toString(parts));
输出:
[a, b, c, d, e, f, g, 1 m, 2]
或强>
String s = "a b c d => e f g 1 m 2";
String[] parts = s.split("\\s*=>\\s*|(?<!\\d)\\s+(?!m)");
System.out.println(Arrays.toString(parts));
答案 1 :(得分:2)
拆分不以数字开头或后跟“m”的空格:
str.split("((?<!\\d) | (?!m))+(\\=> *)?"
FYI“+”作为可选组中的替换是多余的,因为初始“+”将消耗所有空格。