2012-10-26 3 views
0

Может кто-нибудь сказать мне, что в этом плохого? Я пытаюсь заставить программу возвращать количество слов в строке. Он застревает в бесконечном контуре ...Количество слов в строке Бесконечная петля

int NumberNames(String wholename) 

{  
    String testname=wholename; 

    int numnames=0; 

    int posBlank= testname.indexOf(' '); 

    while(testname.length()>0) 
    { 
     testname = testname.trim(); 

     testname=testname.substring(posBlank+1,testname.length()); 

     numnames++; 

     System.out.println(testname); 
    }  

    return numnames; 

} 

ответ

3

Два вопроса. Вы не сбрасываете значение posBlank в своем цикле, и если вы передаете строку без пробелов, ваша подстрока всегда просто возвращает целую строку. Вам нужно будет решить оба. Попробуйте это:

int NumberNames(String wholename) 
{ 
    String testname=wholename; 
    int numnames=1; 
    int posBlank= testname.indexOf(' '); 

    while(posBlank > 0) 
    { 
     testname = testname.trim(); 
     testname=testname.substring(posBlank+1,testname.length()); 
     posBlank= testname.indexOf(' '); 
     numnames++; 
     System.out.println(testname); 
    }  

    return numnames; 
} 
2

использование wholeName.trim().split(" ").length вместо

2

почему бы не просто использовать String.split(\\s) вместо ??

String testname=wholename; 
String[] words = testname.split("\\s"); 
sysout(words.length); 
1
return wholename.length() - wholename.replace(" ", "").length() + 1 
+0

Хотя это на самом деле не принимать во внимание нескольких заготовок за один раз ... вы можете запустить цикл, который заменяет все две пустых секции с одной пустой секцией, пока длина не остается тем же самым. – LJ2

Смежные вопросы