使用3个空格作为第一次出现的指定字符串来获取子字符串以返回索引

时间:2013-10-19 16:36:53

标签: java regex string

我有一个字符串,其中单词由一个或三个空格分隔。 我正在尝试打印每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
    }

}

输出:一一

此时start = 11,length = 11,threeSpaces = 11!  threespaces就是问题所在,我期待这个值成为新起始索引(11)中下一组3个空格的索引......任何输入值得赞赏......

PS标题到处都是不容易想到的... ...

4 个答案:

答案 0 :(得分:3)

使用以下代码可以更简单地完成此操作:

String[] myWords = sentence.split("   ");
for (String word : myWords) {
    System.out.println(word);
}

答案 1 :(得分:2)

您必须将开始索引设为start + 1,否则您将获得sentence中相同3个空格的索引:

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

但你必须做更多的任务。您需要在实际调用" "之前检查substring的索引,因为当不再有" "时,索引将为-1,您将获得{{1}异常。为此,您可以将StringIndexOutOfBounds循环条件更改为:

while

这将停止while (lenght<sentence.length() && threeSpaces != -1) 循环,只要3个空格的索引出现while,就意味着,不再有3个空格。


解决此问题的更好方法是在{3}空格上-1

split

答案 2 :(得分: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#split 3个空格:

String[] tokens = sentence.split(" {3}");

答案 3 :(得分:0)

谢谢大家,分裂看起来像是:     字符串短语=“一一三一一三三一一三三三一一”;     String [] split2 = phrase.split(“”);     for(String three:split2)       的System.out.println(3);

输出: 一一 三 一一一 三三 一一一  三三三 一一一个