如何在Java String中搜索空间?

时间:2017-09-25 22:24:03

标签: java

我对编程很陌生,我正在编写这段代码,以便在遇到空格时将字符串(长度)计算到一个点。目的是 - 当用户输入他/她的名字和姓氏时,程序应该从姓氏中拆分姓名并计算姓名(和姓氏)中有多少个字母/字符。

我的代码似乎没有达到/执行“ if-statement ”,如果我输入两个以空格分隔的字符串(name& surname)(输出) :你的名字是:(空格),它有0个字母。但是,如果我只输入一个字符串 if-statement ,它就会被执行。

我做错了什么?

我的示例代码:

this

3 个答案:

答案 0 :(得分:1)

 if(nameAndSurname.indexOf(x) == space)

这条线没有按照你的想法行事。

它从x的索引中获取一个char(字符),并将其与space的值进行比较。空格是一个整数,因此您将位置x处的字符与第一个空格的整数位置进行比较。在这种情况下,位置x处的字母被转换为整数,然后与第一个空格的实际数字值进行比较!

要修复程序,请用此替换整个if语句。

if (nameAndSurname.charAt(x) == ' ') //if there is a space
{
    count = c-1; //how many characters/letters was there before space
    System.out.println(count);
}

额外:

由于你解决这个问题的方式有点矫枉过正,我在下面发布了另一个解决方案,以更容易阅读的方式解决它。如果放入多于或少于1个空间,也不会破坏。

Scanner scan = new Scanner(System.in);
String nameAndSurname;
System.out.println("Enter your full name please:");
nameAndSurname = scan.nextLine().trim();
int indexOfFirstSpace = nameAndSurname.indexOf(' ');
if (indexOfFirstSpace > -1) {
    String firstName = nameAndSurname.substring(0, indexOfFirstSpace);
    System.out.println("Your first name is " + firstName.toUpperCase());
    System.out.println("It is " + firstName.length() + " characters long.");
}

答案 1 :(得分:1)

为什么要烦扰所有代码?只需跳过for循环,就可以了

if (space != -1) nameOnly = nameAndSurname.substring(0,space);

如果你真的想知道字母的数量,那就是 空间+ 1

不需要那些复杂的东西。

答案 2 :(得分:0)

您可以在开始循环之前验证字符串是否有空格,如下所示:

public class Initials {

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in); 
    String nameAndSurname, nameOnly;
    int c = 0, count = 0;
    System.out.println("Enter your full name please:");
    nameAndSurname = scan.nextLine();
    int space = nameAndSurname.indexOf(' ');
    if(space == -1) {
          System.out.println("Your name has no spaces");
    } else {
    for(int x = 0; x<nameAndSurname.length(); x++) {
        c++;
        if(nameAndSurname.indexOf(x) == space) //if there is a space
        { 
            count = c; //how many characters/letters was there before space
            System.out.println(count);
        } 
    }
    nameOnly = nameAndSurname.substring(0, count);
    System.out.println("Your name is: " + nameOnly.toUpperCase() + " and it has " + count + " letters");

}
scan.close();

}