1

我正在研究一种基于 . 分隔符,我使用了 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 我想从 0--->3 从 4--->5 从 6--->7 从 8--->ip.length 子串 127.1.1.254

注意:我知道内置方法 split() 很好,我想手动完成这项工作我犯了什么错误?

4

4 回答 4

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 上放置一个?

于 2012-12-18T04:46:47.467 回答
1

您没有在 for loop 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;

        }
于 2012-12-18T04:48:09.913 回答
0

如果你只想用'.'分割一个字符串 字符,您可以执行以下操作 -

String str[]= inputStr.split("\\.");
于 2012-12-18T04:41:40.233 回答
0

您没有在 case 2 语句的末尾增加 i 。

为什么不使用 String.split()?例如 ip.split("\.");

于 2012-12-18T04:45:51.990 回答