簡體   English   中英

java的split string方法也可以用分隔符返回數組

[英]can split string method of java return the array with the delimiters as well

當我們對字符串使用String.Split()方法在 java 中進行拆分時,其工作原理如下:

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

數組ss包含[Hello, my, dear]但在這種情況下,空格(它們是分隔符)不是數組的一部分。

是否有某種方式可以使分隔符成為使用 Java 中字符串類的 split 方法生成的數組的一部分。

你可以這樣做: -

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

但是您使用錯誤的工具來解析數學表達式。 您不應該為此使用正則表達式。

使用StringTokenizer 的重載構造函數:

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

輸出:

hello

my

dear

您可以在字邊界上拆分。

    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)匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM