web-dev-qa-db-fra.com

Comment faire en sorte que Java enregistre une entrée de chaîne avec des espaces?

Voici mon code:

public static void main(String[] args) {
  Scanner in = new Scanner(System.in);
  String question;
  question = in.next();

  if (question.equalsIgnoreCase("howdoyoulikeschool?") )
    /* it seems strings do not allow for spaces */
    System.out.println("CLOSED!!");
  else
    System.out.println("Que?");

Quand j'essaie d'écrire "comment aimes-tu l'école?" la réponse est toujours "Que?" mais cela fonctionne bien comme "comment faire l'école?"

Devrais-je définir l'entrée comme autre chose que String?

6
user1687772

in.next() retournera des chaînes délimitées par des espaces. Utilisez in.nextLine() si vous voulez lire toute la ligne. Après avoir lu la chaîne, utilisez question = question.replaceAll("\\s","") pour supprimer les espaces.

9
Osiris

Voici un exemple d'implémentation de la prise d'entrée en Java. J'ai ajouté une tolérance de panne sur le champ salaire uniquement pour montrer comment procéder. Si vous remarquez, vous devez également fermer le flux d'entrée .. Enjoy :-) 

/* AUTHOR: MIKEQ
 * DATE: 04/29/2016
 * DESCRIPTION: Take input with Java using Scanner Class, Wow, stunningly fun. :-) 
 * Added example of error check on salary input.
 * TESTED: Eclipse Java EE IDE for Web Developers. Version: Mars.2 Release (4.5.2) 
 */

import Java.util.Scanner;

public class userInputVersion1 {

    public static void main(String[] args) {

    System.out.println("** Taking in User input **");

    Scanner input = new Scanner(System.in);
    System.out.println("Please enter your name : ");
    String s = input.nextLine(); // getting a String value (full line)
    //String s = input.next(); // getting a String value (issues with spaces in line)

    System.out.println("Please enter your age : ");
    int i = input.nextInt(); // getting an integer

    // version with Fault Tolerance:
    System.out.println("Please enter your salary : ");
    while (!input.hasNextDouble())
    {
        System.out.println("Invalid input\n Type the double-type number:");
        input.next();
    }
    double d = input.nextDouble();    // need to check the data type?

    System.out.printf("\nName %s" +
            "\nAge: %d" +
            "\nSalary: %f\n", s, i, d);

    // close the scanner
    System.out.println("Closing Scanner...");
    input.close();
    System.out.println("Scanner Closed.");      
}
}
1
Mike Q

Au lieu de

Scanner in = new Scanner(System.in);
String question;
question = in.next();

Tapez 

Scanner in = new Scanner(System.in);
String question;
question = in.nextLine();

Cela devrait pouvoir prendre des espaces en entrée.

1
SaniKul

Comme il y a longtemps et que les gens continuent à suggérer d'utiliser Scanner#nextLine(), il y a une autre chance pour que Scanner prenne des espaces inclus dans l'entrée.

Scanner de classe

Un scanneur coupe son entrée en jetons à l'aide d'un motif de délimiteur, qui correspond par défaut aux espaces.

Vous pouvez utiliser Scanner#useDelimiter() pour modifier le délimiteur de Scanner en un autre modèle, tel que line feed ou quelque chose d'autre.

Scanner in = new Scanner(System.in);
in.useDelimiter("\n"); // use LF as the delimiter
String question;

System.out.println("Please input question:");
question = in.next();

// TODO do something with your input such as removing spaces...

if (question.equalsIgnoreCase("howdoyoulikeschool?") )
    /* it seems strings do not allow for spaces */
    System.out.println("CLOSED!!");
else
    System.out.println("Que?");
0
Cà phê đen