Java与python的等价物';s字符串分区

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),因为它不返回分隔符。使用: "

Java的string split(正则表达式)函数在正则表达式的所有实例上进行拆分。Python的分区函数只在给定分隔符的第一个实例处进行拆分,并返回一个元组{left,separator,right}

如何实现Java中分区的功能

e、 g

应该成为

"foo", " ", "bar hello world"
  • 有没有外部图书馆 是否已提供此实用程序

  • 没有你我怎么能做到 外部图书馆

  • 如果没有外部库和正则表达式,它能实现吗

注意。我不寻找split(“,2),因为它不返回分隔符。

使用:

"foo bar hello world".split(" ",2) “foo bar hello world”。拆分(“,2) 默认情况下,分隔符是空白

,而不是您想要的,有一个参数接受“limit”参数,告诉它要将字符串拆分为的最大分区数

因此,如果您调用(Java):

您将获得阵列:

["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]"
}