我正在为我的结构化编程类编写一个程序,我们必须获取一个输入字符串,将其分成3个子字符串,然后检查是否所有三个名称都在那里。我在空格处打破了字符串,现在我只需要检查是否有三个空格。我的教授告诉我们,我们必须确保每个名字之间有一个空格。他告诉我只是测试空格字符的索引是否为-1,因为如果它不是那个空间。我只是找不到一种方法来测试它而不会得到“字符串索引超出范围”错误。任何帮助将非常感激。这是我用来测试输入字符串的代码。
System.out.println("Enter filer full name (First Middle Last):");
Scanner input = new Scanner(System.in);
String fullName = input.nextLine();
int n = fullName.indexOf(' ');
int m = fullName.indexOf(' ', n + 1);
String firstName = fullName.substring(0, n);
String middleName = fullName.substring(n + 1, m);
String lastName = fullName.substring(m + 1);
答案 0 :(得分:2)
在您获取子字符串之前,请使用if(n >-1 && m > -1)
来判断您是否有空格。您的新代码看起来像这样
System.out.println("Enter filer full name (First Middle Last):");
Scanner input = new Scanner(System.in);
String fullName = input.nextLine();
int n = fullName.indexOf(' ');
int m = fullName.indexOf(' ', n + 1);
if(n>-1&&m>-1){
String firstName = fullName.substring(0, n);
String middleName = fullName.substring(n + 1, m);
String lastName = fullName.substring(m + 1);
}else{
System.out.println("Don't have spaces!");
}
答案 1 :(得分:1)
$scope
返回负数。此外,String索引从零开始。所以要测试它你会做这样的事情:
indexOf
答案 2 :(得分:1)
如何使用拆分
String fullname = "Scary Old Wombat";
String [] names = fullname.split (" ");
assert (names.length == 3);
答案 3 :(得分:1)
您可以使用indexOf()
方法。
例如:
if(fullName.indexOf(' ') == -1){
// index of space is -1, means space is not present
}
答案 4 :(得分:0)
某些名称可能有也可能没有John Doe
中的中间名,而某些名称的中间名可能包含2 John Smith Williams Joseph Doe
以上的名称。
因此你可以试试这个!
System.out.println("Enter filer full name (First Middle Last):");
Scanner input = new Scanner(System.in);
String fullName = input.nextLine();
String name [] = fullName.split(" ");
if(name.length == 1) {
System.out.println("You don't have spaces in the name");
}
else
if(name.length == 2) {
System.out.println("First Name: " + name[0]);
System.out.println("Last Name: " + name[1]);
}else
if(name.length > 2) {
System.out.println("First Name: " + name[0]);
System.out.print("Middle Name: ");
for (int i = 1; i < (name.length-1) ; i++) {
System.out.print(name[i] + " ");
}
System.out.println();
System.out.println("Last Name: " + name[(name.length-1)]);
}
输出 -
Enter filer full name (First Middle Last):
John Smith Williams Joseph Doe
First Name: John
Middle Name: Smith Williams Joseph
Last Name: Doe