Java的字符串拆分( regex )函数在regex的所有实例中拆分。Python的分区函数仅在给定分隔符的第一个实例处分裂,并返回{左、分隔符、右}的元组。
如何在Java中实现什么分区?
例如:
"foo bar hello world".partition(" ")应该变成
"foo", " ", "bar hello world"注意:我不寻找拆分(“",2),因为它不返回分隔符字符。
发布于 2010-06-23 10:30:45
String.split(String regex, int limit)很接近你想要的。从文件中:
limit参数控制模式应用的次数,因此影响结果数组的长度。
n大于零,则模式将在大多数n - 1时间应用,数组的长度将不大于n,数组的最后一个条目将包含最后匹配分隔符以外的所有输入。n是非正的,那么模式将被应用尽可能多次,并且数组可以有任意长度。n为零,那么模式将被应用尽可能多次,数组可以有任意长度,尾随空字符串将被丢弃。下面是一个展示这些差异的示例(如ideone.com所示):
static void dump(String[] ss) {
for (String s: ss) {
System.out.print("[" + s + "]");
}
System.out.println();
}
public static void main(String[] args) {
String text = "a-b-c-d---";
dump(text.split("-"));
// prints "[a][b][c][d]"
dump(text.split("-", 2));
// prints "[a][b-c-d---]"
dump(text.split("-", -1));
// [a][b][c][d][][][]
}保留分隔符的分区。
如果您需要与分区类似的功能,并且还希望获得由任意模式匹配的分隔符字符串,则可以使用Matcher,然后在适当的索引处使用substring。
下面是一个示例(如ideone.com所示):
static String[] partition(String s, String regex) {
Matcher m = Pattern.compile(regex).matcher(s);
if (m.find()) {
return new String[] {
s.substring(0, m.start()),
m.group(),
s.substring(m.end()),
};
} else {
throw new NoSuchElementException("Can't partition!");
}
}
public static void main(String[] args) {
dump(partition("james007bond111", "\\d+"));
// prints "[james][007][bond111]"
}regex \d+当然是任何数字字符(\d)重复一次或多次(+)。
发布于 2010-06-23 10:21:59
虽然不是您想要的那样,但是有一个分裂的第二版,它接受一个“限制”参数,告诉它要将字符串拆分到的最大分区数。
因此,如果您调用(在Java中):
"foo bar hello world".split(" ", 2);你会得到数组:
["foo", "bar hello world"]这或多或少是你想要的,除了分隔符没有嵌入索引1。如果你真的需要这最后一点,你需要自己做,但希望你特别想要的是限制分裂数目的能力。
发布于 2010-06-23 10:24:30
这个怎么样:
String partition(String string, String separator) {
String[] parts = string.split(separator, 2);
return new String[] {parts[0], separator, parts[1]};
}顺便说一下,您必须在以下位置添加一些输入/结果检查:)
https://stackoverflow.com/questions/3100739
复制相似问题