[英]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.