使用while循环分隔字符串

时间:2018-04-28 02:02:43

标签: java

我遇到一些String方法有问题。在下面的代码中,用户输入其全名,代码将其分为姓氏和地址。

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循环的要求是什么,正如我读到的那样,x被赋予if语句中的name.length,它将设置x == name.length()意味着循环只会跑一次???

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

3 个答案:

答案 0 :(得分:1)

我不知道为什么你必须在代码中使用,也许你可以使用name.split(&#34;&#34;)如果你能确定这个名字,使用&#34; &#34;分隔名字和姓氏,您可以轻松地将其分为名字和姓氏。

答案 1 :(得分:0)

x设置为name.length()会将while条件x < name.length()变为false,所以它绝对可以解决问题:您将摆脱循环。< / p>

但是,代码并未明确将x设置为name.length()的目的:即使是经验丰富的编码人员也会花几秒钟来确定您要执行的操作。更好的方法是使用break语句,它专门用于结束循环:

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

请注意,您的代码还有两个问题:

  • 如果输入中没有空格,firstNamefamilyName仍未设置,
  • 如果输入包含空格作为最后一个字符,则代码将抛出异常。

答案 2 :(得分:0)

这是逻辑的细分:

这将从x = 0(假设这是初始化的内容)循环到name字符串的长度。

while(x < name.length())

在找到第一个space字符后输入此部分。

if(name.charAt(x) == ' ')

这会分配firstNamefamilyNamefirstName是从name字符串的开头到第一个space之前的字符,familyName是从space之后的第一个字符到name的结尾1}}字符串。例如。对于Jane DoefirstName设置为Jane,familyName设置为Doe。

firstName = name.substring(0, x);
familyName = name.substring(x + 1, name.length());

分配后,x设置为下次不执行while循环的条件。

x = name.length();

如果未遇到space,则x会递增,以便可以评估name字符串中的下一个字符。

++x;

更好的方法是编写break语句,而不是设置x = name.length()。这将在找到第一个while字符后以及spacefirstName名称设置后退出familyName循环。

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