我正在研究一种基于分割字符串的方法。分隔符,我已经使用了Pattern和Matcher类,并获取了分隔符的起始位置并将它们存储在一个数组中,现在我想根据那些起始位置拆分指定的字符串,我的问题是当我尝试下面的代码时,程序永远(无限循环)。
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 ---&gt; ip.length
注意:我知道内置方法split(),我想手动完成这项工作 我做了什么错误?
答案 0 :(得分:1)
如果sampleString = "127.1.1.254";
调用String[] yourArrayOfString = sampleString.split(".");
,yourArrayOfString[0] = "127", yourArrayOfString[1] = "1", yourArrayOfString[2] = "1", yourArrayOfString[3] = "3"
会产生break;
。
你有没有故意不在案例0和1上放{{1}}?
答案 1 :(得分:1)
你没有在for loop i变量和case block 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;
}
答案 2 :(得分:0)
如果您只想将字符串拆分为'。'您可以执行以下操作的字符 -
String str[]= inputStr.split("\\.");
答案 3 :(得分:0)
你没有在案例2陈述结尾处递增i。
为什么不使用String.split()?例如ip.split( “\”);