为什么我用String类中的split(String regex)方法切割字符串为字符数组,数组里却没内容?(无法遍历)

publicclassDemo6{publicstaticvoidmain(String[]args)throwsException{BufferedReaderbr=n... public class Demo6 {

public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入IP");
String ip=br.readLine();

String[] a=ip.split(".");
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
展开
 我来答
lifecursor
2012-04-09 · TA获得超过221个赞
知道小有建树答主
回答量:128
采纳率:0%
帮助的人:167万
展开全部
改为:String[] a=ip.split("\\.");
split参数需要一个用来构造正则表达式的字符串。而.(点号)是正则的元字符之一,你要想用.分割就得把.进行转义好让正则表达式知道你是要找一个.(点号实体),你明白吗?
追问
请问,那我接下来想判断IP是否合法,其中有一个是IP地址中不含有除. 0-9这11个字符以外的字符,我这么写哪里错了,该怎么改?
class Tool{
public static boolean isIp(String ip){
for(int i=0;i<ip.length();i++){
for(int j=0;j<=9;j++){
if(ip.charAt(i)!='j'&&ip.charAt(i)!='.'){
return false;
}
}
}
return true;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jimmyc2006
2012-04-09 · TA获得超过1153个赞
知道小有建树答主
回答量:572
采纳率:100%
帮助的人:653万
展开全部
String[] a=ip.split(".");
.在正则总表示任意字符,有特殊意义,应该转义下:
String[] a=ip.split("\\.");
追问
请问,那我接下来想判断IP是否合法,其中有一个是IP地址中不含有除. 0-9这11个字符以外的字符,我这么写哪里错了,该怎么改?
class Tool{
public static boolean isIp(String ip){
for(int i=0;i<ip.length();i++){
for(int j=0;j<=9;j++){
if(ip.charAt(i)!='j'&&ip.charAt(i)!='.'){
return false;
}
}
}
return true;
}
}
追答
你这个逻辑上有一定的问题
按照你的思路应该这样写,遍历给出的ip字符串,如果任意位是0-9或者.就是合法的,如果不是,那么就是非法的。
你的代码ip.charAt(i)!='j'这句是使用字符跟'j'这个字符比,不是跟0-9比,是错误的。
所以应该改为,对字符串遍历,如果发现是0-9或者.就认为这位是合法的,往下走,如果不是0-9或者.就直接认为整个ip串都是不合法的,代码如下:
class Tool {
public static boolean isIp(String ip) {
for (int i = 0; i < ip.length(); i++) {
//假设不是合法的字符
boolean goodChar = false;
for (int j = 0; j <= 9; j++) {
//如果该字符在0-9或者.就认为是合法的,那么再判断下一个字符
if (Character.digit(ip.charAt(i), 10) == j || ip.charAt(i) == '.') {
goodChar = true;
break;
}
}
//如果该字符是非法,那么整个ip串被认为是非法
if(goodChar != true)
return false;
}
return true;
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ghf851208
2012-04-09 · 超过11用户采纳过TA的回答
知道答主
回答量:42
采纳率:100%
帮助的人:32.9万
展开全部
String[] a=ip.split("\\.");
点需要转义。。否则解析不了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2012-04-09
展开全部
要有转义字符。好像是“\”。你试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伏松桖0k
2012-04-09 · TA获得超过1826个赞
知道小有建树答主
回答量:1410
采纳率:100%
帮助的人:729万
展开全部
呃,一二楼说出来了,
追问
请问,那我接下来想判断IP是否合法,其中有一个是IP地址中不含有除. 0-9这11个字符以外的字符,我这么写哪里错了,该怎么改?
class Tool{
public static boolean isIp(String ip){
for(int i=0;i<ip.length();i++){
for(int j=0;j<=9;j++){
if(ip.charAt(i)!='j'&&ip.charAt(i)!='.'){
return false;
}
}
}
return true;
}
}
追答
if(ip.charAt(i)=='j'||ip.charAt(i)=='.'){
return return;
}
或者在你的if里面加个else{return false;}
你这样把return true;放到循坏的外边,他永远反回的都是true,你说是不,不管你循坏是不是false,你最后返回的永远是false.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式