Java 验证用户输入字符串

Java 验证用户输入字符串,java,string,validation,input,Java,String,Validation,Input,我想写一个循环,提示用户输入他们的第一个中间名和姓氏,然后通过搜索每个名字之间的空白来验证输入 示例:第一个中间最后一个 我要找的是下面这样的东西 伪代码:如果名称包含2个空格,且名称中的空格少于3个,则操作已成功。否则,请告诉用户重新输入其第一个中间名和姓氏 我该怎么做呢 import java.util.Scanner; public class Example { public static void main(String[] args) { boolean

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

示例:第一个中间最后一个

我要找的是下面这样的东西

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

          }
       }
    }
 }
import java.util.Scanner;
公开课范例
{
公共静态void main(字符串[]args)
{
布尔值isName=false;
字符串名称=”;
int x=name.length();
扫描仪输入=新扫描仪(System.in);
while(!isName)//完全删除while循环可能更好
{  
System.out.print(“请输入您的‘中名’姓名:”);
name=input.nextLine();
name.trim();//删除任何前导或尾随空格
对于(int i=0;i

上面产生了一个无限循环,从逻辑上我理解了原因。

您可以在一个或多个空格字符上拆分
字符串,并检查是否有三个元素。大概

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': ");
    }
}
问题是(无限循环):

for(int i=0;i
x
初始化为
0
,因为
name.length()
最初为0。由于条件
i符合,您可以使用以下公式计算空白:

 int numOfSpaces = s.length() - s.replaceAll(" ", "").length();
有了这个,你可以知道你是否至少有2个空格。该链接还介绍了计算给定
字符串中存在多少空格的不同方法。


干杯

我想你应该研究一下regex,这是很多简单任务的代码,我很难理解:“如果名称包含2个空格,并且名称中的空格少于3个,那么操作是成功的”怎么回事?这是伪密码?如果用户输入Thomas[space]Jones[space],则[Smith]输入正确;如果用户输入[Thomas]space,然后点击enter,则输入不正确。我至少需要两个白色的空格,谢谢。这更容易理解。它不是==3,而是<3,它已经设置为检查它是否是==2,并且现在Iv'e的编写方式不会起任何作用lol@Afflicted当您按空格
拆分
时,返回的数组应该有3个元素(名称),分别为first、middle和last。这就是为什么它是
==3
,因为如果你有2个空格,那么你就有3个名字,这就是你想要的。是的,这是正确的答案,谢谢@Elliott Frisch。我甚至没有想到RegexThanks指出我不敢相信我把它放在了那里,不幸的是,即使它被初始化在正确的位置(比如在输入字符串之后),它仍然不能工作,因为它在逻辑上不能与if中的方法一起工作
 int numOfSpaces = s.length() - s.replaceAll(" ", "").length();