【问题标题】:My loop can't find blank space in my String我的循环在我的字符串中找不到空格
【发布时间】:2018-09-08 18:53:00
【问题描述】:

我一直在尝试制作一个程序,要求用户输入一个只有一个空格的句子,一旦他们这样做,我的循环应该遍历字符串并找到一个空格,然后取用户的名字和姓氏。唯一的问题是我的循环没有看到空白,它永远不会进入 if。我已经尝试了整个下午,尽管它看起来很简单,但现在它真的在吃我。

这是我的代码:

    Scanner sc = new Scanner(System.in);

    String firstName="";
    String lastName="";
    String fullName="";
    int cpt=0;
    int cptBlank=0;

    System.out.println("Entrez votre nom et prénom :");
    fullName = sc.nextLine();

    cpt = fullName.length();
    indicateur = cpt+1;

    for(int i=0; i<cpt;i++) {   
        if(fullName.indexOf(i) == ' ') {    
            cptBlank = i;   
            System.out.println(i);
        }
        System.out.println("test");
    }
    firstName = fullName.substring(0, cptBlank);
    lastName = fullName.substring(cptBlank+1, fullName.length() - firstName.length() );*

这是我的程序的返回:

    Entrez votre nom et prénom :
    jean jean
    bla
    bla
    bla
    bla
    bla
    bla
    bla
    bla
    bla
    La chaîne contient : 9 caractères
    9
    Your full name is : jean jean
    Votre prénom est : 
    Votre nom est : ean jean

【问题讨论】:

  • indexOf() 不需要在循环内。这是作业吗?是否允许使用indexOf() 之类的字符串方法?如果您需要自己编写循环,我认为不允许使用 indexOf()
  • 您显示的代码和输出根本不适合。例如,La chaîne contient : 9 caractères 打印在哪里?请:编程就是关心所有细节。除非您提供明确、正确的minimal reproducible example,否则我们无法为您提供帮助!
  • 字符串比较应该使用.equals()而不是==
  • @SamLittlefair 是比较字符串或字符的 OP 吗?
  • 如果你想写一个循环,那么你会使用 charAt(...) 来测试每个字符的空格。否则 indexOf(...) 将只返回第一个空格的索引,因此不需要循环。

标签: java string loops for-loop charat


【解决方案1】:

如果您不介意我已经重写了您的代码,不知道您是否喜欢它,但它就是这样:

public static void main(String[] args) throws IOException {
    Scanner sc = new Scanner(System.in);
    String firstName="";
    String lastName="";
    String fullName="";
    String names[] = new String[2];

    System.out.println("Entrez votre nom et prénom :");
    fullName = sc.nextLine();
    names = fullName.split(" ");
    firstName = names[0];
    lastName = names[1];
    System.out.println("Full name: "+fullName+" First name :"+firstName+" Last Name :"+lastName);

}

我在空白处拆分了输入字符串并收集了名字和姓氏。您不需要任何循环来执行此操作。

【讨论】:

  • 您的代码完美运行!如果我理解正确,您创建了一个包含两个名为“名称”的 Sring 数组,将用户输出的字符串拆分为空白“”,这要归功于 split 方法,该方法还将结果放在数组名称之前和之后,然后放置它分为名字和姓氏?感谢您的支持!
  • 根据 Javadoc,不鼓励在新代码中使用 StringTokenizer。请参考这个答案:stackoverflow.com/a/6983908/3888766
【解决方案2】:

如果我理解正确,您正在尝试将全名作为输入并将其分成两个变量,因此请尝试使用名为 String Tokenizer 的类为您编写的示例代码,其主要目的是获取字符串和分隔符和切割此字符串后输出标记。

String Fullname , Firstname , Lastname;

   Scanner input = new Scanner(System.in);
   System.out.println("Enter Full Name");
   Fullname = input.nextLine();

        StringTokenizer st = new StringTokenizer(Fullname, " ");
        Firstname = st.nextToken();
        Lastname = st.nextToken();
        System.out.println("First Name: "+Firstname);
        System.out.println("Last Name: "+Lastname);

【讨论】:

  • 您理解正确,您的代码运行良好。 Tokenizer 类似乎非常有效,我将阅读更多关于它的内容,感谢您的帮助!
  • (1-) 变量名称不应以大写字符开头。发布代码时遵循 Java 命名约定。
  • @camickr 所以你离开了函数和一切的逻辑,唯一让你烦恼的是命名约定!!!!!!
猜你喜欢
  • 1970-01-01
  • 2016-08-27
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 1970-01-01
  • 2018-12-11
  • 2015-12-12
相关资源
最近更新 更多