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ループ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

ケース2ステートメントの最後でiをインクリメントしていません。

String.split()を使ってみませんか?例:ip.split( "\。");

于 2012-12-18T04:45:51.990 に答える