验证用户输入字符串

问题描述:

我想写一个循环,提示用户输入他们的第一个中间名和最后一个名,然后我想通过搜索每个名称之间的空格来验证该输入。验证用户输入字符串

示例:第一中间最后

我在找的是类似于下面的内容。伪代码:如果名称包含2个空白并且它们的名称小于3个空格,则操作已成功,否则请告诉用户重新输入其第一个中间名和最后一个名。

我该如何去做这件事?

import java.util.Scanner; 

public class Example 
{ 
    public static void main(String[] args) 
    { 
     boolean isName = false; 
     String name = ""; 
     int x = name.length(); 
     Scanner input = new Scanner(System.in); 

     while(!isName) // Probably better to remove the while loop entirely 
     { 
      System.out.print("Please input your 'First Middle Last' name: "); 
      name = input.nextLine(); 
      name.trim(); // To remove any leading or trailing white spaces 

      for(int i = 0; i < x; i++) 
      { 
      if(name.lastIndexOf(' ', i) == 2 && name.lastIndexOf(' ', i) < 3) 
      {   

       isName = true; 
       break; 
      } 

       else 
       System.out.print("\nEnter your name as 'First Middle Last': "); 
       name = input.nextLine(); 
       name = name.trim(); 
       System.out.print("\nInvalid input");    

      } 
     } 
    } 
} 

以上产生一个无限循环,逻辑上我明白为什么。

+1

我想你应该考虑的正则表达式,这是简单的任务 –

+1

我有一个很难理解大量的代码:“如果名称中包含2个白色空间及其少于3个白色空间名称的操作有已成功“ – Ceelos

+0

怎么样?这是Psuedo代码?如果此人进入托马斯[空间]琼斯[空间],然后[史密斯]输入是正确的,如果用户输入[托马斯]空间然后命中输入然后输入将是不正确的。我需要至少两个空格 – Afflicted

您可以在split之间对一个或多个空格字符String进行检查,并检查是否有三个元素。喜欢的东西,

boolean isName = false; 
String name = ""; 
Scanner input = new Scanner(System.in); 

while (!isName) { 
    System.out.print("Please input your 'First Middle Last' name: "); 
    name = input.nextLine(); 
    isName = (name.trim().split("\\s+").length == 3); 
    if (!isName) { 
     System.out.print("\nEnter your name as 'First Middle Last': "); 
    } 
} 
+0

这不是== 3它的 Afflicted

+0

@ElliottFrisch是我的坏... – brso05

+0

@Afflicted这是正确的答案。 – brso05

这是问题(无限循环):因为name.length()是0最初

for(int i = 0; i < x; i++) 

x被初始化为0。由于条件i<x永远不会满足,它永远不会进入for循环,并且while循环永远持续。

就在for循环之前,您需要做x = name.length()。另外,正如其他人所建议的,您需要在{}中附上else部分的声明。

+0

谢谢你指出,我不能相信我把它放在那里,可悲的是,即使它被初始化在正确的位置(如在字符串输入后)它仍然不会工作,因为它在逻辑上不能用if中的方法 – Afflicted

this link你可以指望空格有:

int numOfSpaces = s.length() - s.replaceAll(" ", "").length(); 

有了这个,你可以告诉你,如果有至少2位。该链接还通过计算给定String中存在多少空白的不同方法。
干杯!