Java与python的等价物';s字符串分区
Java的string split(正则表达式)函数在正则表达式的所有实例上进行拆分。Python的分区函数只在给定分隔符的第一个实例处进行拆分,并返回一个元组{left,separator,right} 如何实现Java中分区的功能 e、 g 应该成为Java与python的等价物';s字符串分区,java,python,string,split,Java,Python,String,Split,Java的string split(正则表达式)函数在正则表达式的所有实例上进行拆分。Python的分区函数只在给定分隔符的第一个实例处进行拆分,并返回一个元组{left,separator,right} 如何实现Java中分区的功能 e、 g 应该成为 "foo", " ", "bar hello world" 有没有外部图书馆 是否已提供此实用程序 没有你我怎么能做到 外部图书馆 如果没有外部库和正则表达式,它能实现吗 注意。我不寻找split(“,2),因为它不返回分隔符。使用: "
"foo", " ", "bar hello world"
- 有没有外部图书馆 是否已提供此实用程序
- 没有你我怎么能做到 外部图书馆
- 如果没有外部库和正则表达式,它能实现吗
["foo", "bar hello world"]
这或多或少是您想要的,除了分隔符未嵌入索引1之外。如果你真的需要这最后一点,你需要自己去做,但希望你特别想要的是能够限制分裂的数量
是否已有提供此实用程序的外部库
据我所知没有
如果没有外部库,我将如何实现它?
如果没有外部库和正则表达式,它能实现吗
当然,这一点问题都没有;只需使用String.indexOf()
和String.substring()
。但是,Java没有元组数据类型,因此您必须返回数组、列表或编写自己的结果类。这样如何:
String partition(String string, String separator) {
String[] parts = string.split(separator, 2);
return new String[] {parts[0], separator, parts[1]};
}
顺便说一句,您必须在此处添加一些输入/结果检查:)已接近您想要的。从文件中:
limit
参数控制应用阵列的次数,从而影响结果阵列的长度
- 如果限制
大于零,则模式将最多应用n
n-1次,数组长度将不大于
,数组的最后一个条目将包含最后一个匹配分隔符之外的所有输入n
- 如果
为非正,则图案将被应用尽可能多的次数,并且阵列可以有任何长度。n
- 如果
为零,则将尽可能多次应用该模式,数组可以有任何长度,并且将丢弃尾随的空字符串n
- 如果
保留分隔符的分区 如果您需要与分区类似的功能,并且还希望获得由任意模式匹配的分隔符字符串,那么可以使用,然后在适当的索引处获取
substring
下面是一个例子():
正则表达式
\d+
当然是任何数字字符(\d
)重复一次或多次(++
)。请仔细阅读-这不是问题的答案。这不会返回分隔符,这是问题的要求。保留分隔符字符是一项要求。@sprocketonline:啊,我明白了,我原以为数组索引只是分隔符regex(因此拼接起来很简单),但现在我明白了匹配regex的是字符序列(非常不同)。在这种情况下,使用Polygene润滑油的答案,因为最简单的方法是显式使用匹配器。在chrome 48中不起作用:“foo bar hello world”。split(“,2);[“foo”,“bar”]@pbanka:那是因为Chrome控制台不执行Java。(事实上,这也是Javascript中的合法语法,这是一个巧合。)@AndrzejDoyle–哦,伙计,对不起。我误读了这条线索的标题。+1是迄今为止唯一正确的答案!对于ideone的介绍,增加了想象+1,这看起来非常有用。@Andrzej:是的,使用ideone,您可以快速(i)看到它的工作原理(ii)编辑并测试它您的selfseparator参数split是一个正则表达式
["foo", "bar hello world"]
String partition(String string, String separator) {
String[] parts = string.split(separator, 2);
return new String[] {parts[0], separator, parts[1]};
}
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][][][]
}
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]"
}