当我们在java中对字符串使用String.Split()
方法进行拆分时,它的工作方式如下:
String s = "hello my dear";
String[] ss = s.split("[ ]");
数组ss
包含[Hello, my, dear]
,但本例中的空格(即分隔符)不是数组的一部分。
有没有可能分隔符是使用Java中string类的split方法生成的数组的一部分。
发布于 2012-12-26 02:01:41
你可以这样做:
"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-26 02:00:56
使用StringTokenizer's重载构造函数:
String s = "hello my dear";
StringTokenizer st = new StringTokenizer(s, " ", true);
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}
输出:
hello
my
dear
发布于 2012-12-26 02:11:51
您可以在单词边界上拆分。
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)匹配。
https://stackoverflow.com/questions/14032850
复制相似问题