首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java等价于python的字符串分区

问Java等价于python的字符串分区
EN

Stack Overflow用户
提问于 2010-06-23 10:18:26
回答 4查看 5.2K关注 0票数 4

Java的字符串拆分( regex )函数在regex的所有实例中拆分。Python的分区函数仅在给定分隔符的第一个实例处分裂,并返回{左、分隔符、右}的元组。

如何在Java中实现什么分区?

例如:

代码语言:javascript
复制
"foo bar hello world".partition(" ")

应该变成

代码语言:javascript
复制
"foo", " ", "bar hello world"
  • 是否已经有提供此实用程序的外部库?
  • 如果没有外部库,我将如何实现?
  • 如果没有外部库和Regex,它能实现吗?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-06-23 10:30:45

String.split(String regex, int limit)很接近你想要的。从文件中:

limit参数控制模式应用的次数,因此影响结果数组的长度。

  • 如果极限n大于零,则模式将在大多数n - 1时间应用,数组的长度将不大于n,数组的最后一个条目将包含最后匹配分隔符以外的所有输入。
  • 如果n是非正的,那么模式将被应用尽可能多次,并且数组可以有任意长度。
    • 如果n为零,那么模式将被应用尽可能多次,数组可以有任意长度,尾随空字符串将被丢弃。

下面是一个展示这些差异的示例(如ideone.com所示):

代码语言:javascript
复制
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所示):

代码语言:javascript
复制
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)重复一次或多次(+)。

票数 5
EN

Stack Overflow用户

发布于 2010-06-23 10:21:59

虽然不是您想要的那样,但是有一个分裂的第二版,它接受一个“限制”参数,告诉它要将字符串拆分到的最大分区数。

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

代码语言:javascript
复制
"foo bar hello world".split(" ", 2);

你会得到数组:

代码语言:javascript
复制
["foo", "bar hello world"]

这或多或少是你想要的,除了分隔符没有嵌入索引1。如果你真的需要这最后一点,你需要自己做,但希望你特别想要的是限制分裂数目的能力。

票数 5
EN

Stack Overflow用户

发布于 2010-06-23 10:24:30

这个怎么样:

代码语言:javascript
复制
String partition(String string, String separator) {
    String[] parts = string.split(separator, 2);
    return new String[] {parts[0], separator, parts[1]};
}

顺便说一下,您必须在以下位置添加一些输入/结果检查:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3100739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档