Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.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 使用while循环分离字符串_Java - Fatal编程技术网

Java 使用while循环分离字符串

Java 使用while循环分离字符串,java,Java,我在使用一些字符串方法时遇到问题。在下面的代码中,用户输入其全名,代码将其分为名字和姓氏 while(x < name.length()) { if(name.charAt(x) == ' ') { firstName = name.substring(0, x); familyName = name.substring(x + 1, name.length()); x = name.length();

我在使用一些字符串方法时遇到问题。在下面的代码中,用户输入其全名,代码将其分为名字和姓氏

while(x < name.length())
    {
      if(name.charAt(x) == ' ')
      {
        firstName = name.substring(0, x);
        familyName = name.substring(x + 1, name.length());
        x = name.length();
      }
      ++x;
    }
我很难理解while循环的要求是什么,正如我读到的,在if语句中x被分配给name.length,这将设置x==name.length,这意味着循环只运行一次

有人能帮我解决这个问题吗?

将x设置为name.length会发生变化,而条件x 但是,该代码没有明确将x设置为name.length的目的:即使是有经验的程序员也会花几秒钟的时间来弄清楚您要做什么。更好的方法是使用break语句,它是专门为结束循环而设计的:

if(name.charAt(x) == ' ')
{
    firstName = name.substring(0, x);
    familyName = name.substring(x + 1, name.length());
    break;
}
请注意,您的代码还有两个问题:

如果输入不包含空格,则firstName和familyName保持未设置状态,并且 如果输入包含空格作为最后一个字符,代码将抛出异常。 这是逻辑的分解:

这将从x=0开始循环,假设这是它初始化为的名称字符串长度

这将指定firstName和familyName。firstName是从名称字符串的开头到第一个空格前的字符,familyName是从空格后的第一个字符到名称字符串的结尾。例如,对于Jane Doe,firstName设置为Jane,familyName设置为Doe

firstName = name.substring(0, x);
familyName = name.substring(x + 1, name.length());
赋值后,x被设置为下次不会执行while循环的条件

x = name.length();
如果未遇到空格,则x将递增,以便可以计算名称字符串中的下一个字符

++x;
更好的方法是编写break语句,而不是设置x=name.length。在找到第一个空格字符并设置firstName和familyName后,将退出while循环

if(name.charAt(x) == ' ') {
  firstName = name.substring(0, x);
  familyName = name.substring(x + 1, name.length());
  break;
}
++x;

我不知道为什么您必须在编写代码时使用,也许您可以使用name.split。如果您可以确保name,using将名字和姓氏分开,您可以很容易地将其分为名字和姓氏。

字符串名称[]=name.split如何?通过逐个字符遍历名称字符来查找空格字符。如果第一个字符是空格,则循环只运行一次,这是糟糕的编程。x=name.length应该用一个中断来代替,以使事情更清楚,因为这本质上就是它所起的作用。这是作为课程材料提供给我的代码,中断对我来说更有意义,if语句一次只测试一个字符吗?是的charAt函数只查看一个字符可能是你可以使用indexOf来获取空间索引,然后是你知道的其他字符..啊,谢谢,我很困惑地认为if语句中的代码块每次都在运行,当然不是!谢谢你,休息会更有意义的。
while(x < name.length())
    {
      if(name.charAt(x) == ' ')
      {
        firstName = name.substring(0, x);
        familyName = name.substring(x + 1, name.length());
        x = name.length();
      }
      ++x;
    }
if(name.charAt(x) == ' ') {
  firstName = name.substring(0, x);
  familyName = name.substring(x + 1, name.length());
  break;
}
++x;