我正在研究一种基于 . 分隔符,我使用了模式和匹配器类,并获取了分隔符的起始位置并将它们存储在数组中,现在我想根据这些起始位置拆分指定的字符串,我的问题是当我尝试以下代码时, 程序永远(无限循环)。
public void cutByRegex(){
String outPut="";
int i=0;
int startIndex[]=new int[3];
System.out.println("IP--->"+ip);
Pattern p=Pattern.compile("\.");
Matcher m=p.matcher(ip);
while (m.find()){
startIndex[i]=m.start();
i++;
System.out.println("start: "+m.start());
}
System.out.println("StartIndices-->");
for(int j:startIndex)
System.out.println(j);
for(i=0;i<startIndex.length+1;){
switch(i){
case 0:
outPut+=ip.substring(i,startIndex[i]);
i++;
case 1:
outPut+=ip.substring(startIndex[i]-1,startIndex[i]);
i++;
case 2:
outPut+=ip.substring(startIndex[i]-1,startIndex[i]);
outPut+=ip.substring(startIndex[i],ip.length());
break;
}
System.out.println("group--->"+outPut);
}
}
例如: startIndex 数组包含 3,5,7 我想子字符串 127.1.1.254 从 0--->3 从 4--->5 从 6--->7 从 8--->ip.长度
注意:我知道内置的方法split()很好,我想手动完成这项工作 我犯了什么错误??
您尚未在循环 i 变量和案例块 2 中使用增量部分
您的代码
for(i=0;i<startIndex.length+1;){
case 2:
outPut += ip.substring(startIndex[i] - 1, startIndex[i]);
outPut += ip.substring(startIndex[i], ip.length());
break;
}
change with it
for (i = 0; i < startIndex.length + 1;i++) {
case 2:
outPut += ip.substring(startIndex[i] - 1, startIndex[i]);
outPut += ip.substring(startIndex[i], ip.length());
i++;
break;
}
当你有这个sampleString = "127.1.1.254";
调用String[] yourArrayOfString = sampleString.split(".");
会导致yourArrayOfString[0] = "127", yourArrayOfString[1] = "1", yourArrayOfString[2] = "1", yourArrayOfString[3] = "3"
。
您是否故意不对案例 0 和 1 进行break;
?
如果您只想用 '." 字符拆分字符串,您可以执行以下操作 -
String str[]= inputStr.split("\.");
您不会在案例 2 语句的末尾递增 i。
为什么不使用 String.split()? 例如 ip.split("\.");