0

単語が 1 つまたは 3 つのスペースで区切られている文字列があります。3 つのスペースごとに区切られた一連の単語を印刷しようとしています。3 つのスペースに到達し、無限ループに入る最初の単語セットまで取得します。

String sentence = "one one one   three   three one   three one";
    int lenght=0;
    int start=0;
    int threeSpaces = sentence.indexOf("   ");//get index where 1st 3 spaces occur

    while (lenght<sentence.length()) {



    String word = sentence.substring(start, threeSpaces);//get set of words separated by 3 spaces
    System.out.println(word);
    start=threeSpaces;//move starting pos
    length=threeSpaces;//increase length 
    threeSpaces= sentence.indexOf("   ", start);//find the next set of 3 spaces from the last at index threeSpaces

    }//end while
    }

}

出力: 1 つ 1 つ

この時点で、start = 11、length = 11、threeSpaces = 11 です。threespaces が問題です。値は、新しい開始インデックス (11) からの次の 3 つのスペースのセット ' ' のインデックスであると予想していました...任意の入力を歓迎します...

PS のタイトルはあちこちに少しあります。簡単なものは考えられませんでした...

4

4 に答える 4

3

これは、次のコードでより簡単に実行できます。

String[] myWords = sentence.split("   ");
for (String word : myWords) {
    System.out.println(word);
}
于 2013-10-19T16:40:57.353 に答える
2

開始インデックスを としてstart + 1指定する必要があります。そうしないと、 内の同じ 3 つの空白のインデックスが取得されますsentence

threeSpaces = sentence.indexOf("   ", start + 1);

しかし、もう少しタスクを実行する必要があります。" "実際に を呼び出す前にのインデックスを確認する必要があります。substringこれ以上 がない場合" "、インデックスは になり-1、例外が発生するためStringIndexOutOfBoundsです。そのためには、whileループ条件を次のように変更します。

while (lenght<sentence.length() && threeSpaces != -1)

これwhileにより、3 つのスペースのインデックスが になるとすぐにループが停止します-1。つまり、3 つの空白がなくなります。


この問題を解決するより良い方法はsplit、3 つの空白を使用することです。

String[] words = sentence.split("\\s{3}");

for (String word : words) {
    System.out.println(word);
}
于 2013-10-19T16:41:37.337 に答える
1

I have a string where words are either seperated by one or three spaces. I am tryng to print the set of words that are seperated by every 3 spaces.

String#split3 つのスペースを使用する必要があります。

String[] tokens = sentence.split(" {3}");
于 2013-10-19T16:41:27.220 に答える
0

どうもありがとう、分割は次のように見えます: String phrase= "one one three one one three three one one one three three three one one one"; String[] split2 = phrase.split(" "); for( 文字列 three:split2) System.out.println(three);

出力: 1 1 3 1 1 3 3 1 1 3 3 1 1 1

于 2013-10-19T17:14:03.273 に答える