验证用户输入字符串

时间:2016-02-29 18:29:10

标签: java string validation input

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

示例:第一个中间位置

我正在寻找的是以下内容。

伪代码:如果名称包含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");            

          }
       }
    }
 }

上面产生了一个无限循环,逻辑上我理解为什么。

3 个答案:

答案 0 :(得分:1)

您可以在一个或多个空格字符上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': ");
    }
}

答案 1 :(得分:0)

这是问题(无限循环):

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

x初始化为0,因为name.length()最初为0。由于条件i<x永远不会得到满足,因此它永远不会进入for循环,while循环会一直持续。

for循环之前,您需要执行x = name.length()。另外,正如其他人所建议的那样,您需要将{}部分中的语句括在else部分。

答案 2 :(得分:0)

根据this link,您可以使用以下内容计算空格:

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

通过这个你可以判断你是否至少有2个空格。该链接还介绍了计算给定String中存在多少个空格的不同方法。
干杯!