【问题标题】:How to search for space in a Java String?如何在 Java 字符串中搜索空格?
【发布时间】:2017-09-25 22:24:02
【问题描述】:

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

如果我输入两个用空格分隔的字符串(姓名和姓氏),我的代码似乎无法到达/执行“if 语句”(输出:你的名字是:(空格),它有0个字母。但是,如果我只输入一个字符串,if-statement,它就会被执行。

我做错了什么?

我的示例代码:

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(' ');
    for(int x = 0; x<=nameAndSurname.length()-1; 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();
}

【问题讨论】:

  • String::indexOf 可能会有所帮助。
  • 嗨,但我使用的是字符串对象的 indexOf。你指的是哪一个?
  • @user2478398 那是什么语言?因为它不是 java,看起来像 c++
  • @MasterYoda 这显然是 Java。 System.out.println 单独告诉我们。
  • x&lt;=nameAndSurname.length()-1 == x &lt; nameAndSurname.length()

标签: java


【解决方案1】:

为什么要麻烦这些代码?跳过 for 循环,有一个

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

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

不需要那些复杂的东西。

【讨论】:

    【解决方案2】:
     if(nameAndSurname.indexOf(x) == space)
    

    这条线没有做你认为它正在做的事情。

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

    要修复程序,请将整个 if 语句替换为 this。

    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.");
    }
    

    【讨论】:

    • 一个微不足道的改进,你应该使用 trim() 方法删除字符串的前导空格,这样如果用户在他们的名字前输入空格就不会失败:scan.nextLine().trim ()
    【解决方案3】:

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

    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();
    

    }

    【讨论】:

      猜你喜欢
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 2021-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多