Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 字符串无限循环中的字数_Java - Fatal编程技术网

Java 字符串无限循环中的字数

Java 字符串无限循环中的字数,java,Java,有人能告诉我这有什么问题吗?我试图让程序返回字符串中的字数。它被困在一个无限循环中 int NumberNames(String wholename) { String testname=wholename; int numnames=0; int posBlank= testname.indexOf(' '); while(testname.length()>0) { testname = testname.

有人能告诉我这有什么问题吗?我试图让程序返回字符串中的字数。它被困在一个无限循环中

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;

}

两个问题。在循环中不重置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;
}

改用
wholeName.trim().split(“”).length
为什么不改用
String.split(\\s)

 String testname=wholename;
 String[] words = testname.split("\\s");
 sysout(words.length);

虽然这实际上并没有同时考虑多个空格。。。您可以运行一个循环,将每两个空白部分替换为一个空白部分,直到长度保持不变。
return wholename.length() - wholename.replace(" ", "").length() + 1