使用string.split时字符串无法正确分割

3

我很不好意思,要问一个非常新手的问题,但是这个问题一整个上午都困扰着我。问题如下: 我想使用三个点作为分隔符将IP地址拆分为四个单独的字符串。下面是我使用的代码:

     Toast.makeText(getBaseContext(),s,Toast.LENGTH_SHORT).show();
     String[] ip = s.split(".",4);
     String ip0ne = ip[0];
     String ipTwo = ip[1];
     String ipThree = ip[2];
     String ipFour = ip[3];

's'是包含IP地址'82.163.99.82'的字符串,这在toast中已经验证过了。问题在于,ipOne,ipTwo和ipThree最终什么都没有,而ipFour最终包含'163.99.82'。IP地址的第一个数字完全消失了。请帮忙解决!


“.” 在正则表达式中表示任何字符。 - Peter Lawrey
2个回答

8
String[] ip = s.split("\\.",4);

字符串参数被视为正则表达式,因此我们必须转义句点(在Java中,我们还必须转义转义字符 - 因此:使用双反斜杠)。


再解释一下:split 的第一个参数是一个正则表达式。在字符串字面量中的 "\." 在内存中变成了 \.。而正则表达式中的 . 匹配一个字面上的点号。 - John Watts

1

split 方法需要一个正则表达式 - 在正则表达式中,. 匹配任何字符 :( 就我个人而言,我认为非正则表达式 API 接受正则表达式 作为 String 而没有在方法名称中指示任何内容是很疯狂的,但是......

您可以使用 "\\." 作为分隔符 - 但我个人会使用 Guava 和它的 Splitter 类型:

private static final Splitter DOT_SPLITTER = Splitter.on('.').limit(4);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接