0

我认为这是一个奇怪的问题。所以这是我的分裂:

String s = "asd#asd";
String[] raw1 = s.split("#"); // this has size of two raw[0] = raw[1] = "asd"

然而,

String s = "asd$asd";
String[] raw2 = s.split("$"); // this has size of ONE

raw2 未拆分。有谁知道为什么?

4

4 回答 4

5

因为split()需要一个正则表达式,并$表示行尾。如果您需要拆分实际上是正则表达式元字符的字符,则需要对其进行转义。

有关正则表达式元字符,请参见模式

您可能会发现StringTokenizer更适合您的需求。这将获取您应该拆分的字符列表,并且不会将它们解释为正则表达式元字符。然而,它使用起来有点冗长和笨拙。正如 Nandkumar 在下面指出的那样,最新的文档指出在新代码中不鼓励这样做。

于 2012-08-09T09:00:35.867 回答
3

你必须逃避它:

String s = "asd$asd";
String[] raw2 = s.split("\\$"); // this has size of TWO
于 2012-08-09T09:00:14.653 回答
3

因为split()采用正则表达式并$匹配行尾。

你必须逃避它:

s.split("\\$");

有关正则表达式的更多信息,请参阅模式文档

于 2012-08-09T09:01:03.187 回答
1

你需要转义特殊字符,让它

s.split("\\$"); 
于 2012-08-09T09:00:26.897 回答