我想编写一个循环,提示用户输入他们的第一个中间名和姓,然后我想通过搜索每个名称之间的空格来验证该输入。
示例:第一个中间位置
我正在寻找的是以下内容。
伪代码:如果名称包含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");
}
}
}
}
上面产生了一个无限循环,逻辑上我理解为什么。
答案 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
中存在多少个空格的不同方法。
干杯!