1

当我们String.Split()在一个字符串上使用方法在java中进行拆分时,它的工作原理如下:

String s = "hello my dear";
String[] ss = s.split("[ ]");

在这种情况下,数组ss包含[Hello, my, dear]但空格(它们是分隔符)不是数组的一部分。

是否有某种方式可以使分隔符成为使用 Java 中字符串类的 split 方法生成的数组的一部分。

4

3 回答 3

4

你可以这样做: -

"hello my dear".split("(?<=[ ])");

它在空格之后拆分为一个空字符串。这将为您提供包含以下元素的数组:-

hello_
my_
dear

_是空间的意思。


如果你希望你的分隔符是单独的数组元素,你可以这样做: -

System.out.println(Arrays.toString("a+b=c".split("(?<=[+=])|(?=[+=])")));

现在,这将拆分为空字符串,该字符串要么紧随其后,要么紧随+ or =其后+ or =。因此,针对上述情况执行拆分的所有位置都是这样的:-

a + b = c
 ^ ^ ^ ^    <-- Empty strings before and after your pattern - `[+=]`

因此,您的数组中有 5 个元素。

输出: -

[a, +, b, =, c]

但是您使用了错误的工具来解析数学表达式。您不应该为此使用正则表达式。

于 2012-12-25T18:01:40.583 回答
2

使用StringTokenizer 的重载构造函数:

String s = "hello my dear";
StringTokenizer st = new StringTokenizer(s, " ", true);
while(st.hasMoreTokens()){
    System.out.println(st.nextToken());
}

输出:

hello

my

dear
于 2012-12-25T18:00:55.517 回答
0

您可以在单词边界上进行拆分。

    String[] ts = "hello my dear".split("\\b");
    System.out.println(Arrays.toString(ts));

[, hello,  , my,  , dear]

或者

public String[] getParts(String s) {
    List<String> parts = new ArrayList<String>();
    Pattern pattern = Pattern.compile("(\\w+|\\W)");
    Matcher m = pattern.matcher(s);
    while (m.find()) {
        parts.add(m.group());
    }
    return parts.toArray(new String[parts.size()]);
}

这与每个查找单词\\w+(小 w)或非单词字符\\W(大写 W)匹配。

于 2012-12-25T18:11:51.317 回答