11
votes

Comment faire enregistrer Java 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?");


1 commentaires

5 Réponses :


17
votes

in.Next () retournera des chaînes délimitées d'espace. Utilisez in.Nextline () si vous voulez lire la ligne entière. Après avoir lu la chaîne, utilisez question = question.replaceall ("\\ s", "") pour supprimer les espaces.


3 commentaires

Merci! In.NextLine () était exactement ce que je cherchais. Par curiosité, pourquoi voudrais-je supprimer les espaces?


@ user1687777 C'est un peu vieux maintenant, mais je pense que Osiris a ajouté que depuis dans votre code, vous comparez contre Howdoyoulikeschool? - Pas d'espaces.


Dans le même cas de scanner. L'INPUT.NEXLINE () ne fonctionne pas si je donne les valeurs d'entrée comme 10, 4.0, testez bien le code. Après avoir obtenu la valeur d'entrée et la double valeur, je peux obtenir le premier mot de la phrase que j'ai donné à l'aide de INPUT.NEXT () mais lorsque j'essaie avec Input.NextLine (). ça ne marche pas. Une autre chose que si vous donnez la saisie de la phrase d'entrée en premier à cette époque, je peux obtenir les phrases complètes à l'aide de Input.NextLine (). Quelqu'un a-t-il rencontré des cas comme celui-ci ???



2
votes

au lieu de xxx

type dans xxx

ceci doit pouvoir prendre des espaces en entrée. >


0 commentaires

1
votes

Il s'agit d'un exemple de mise en œuvre de la saisie de la saisie de Java, j'ai ajouté une certaine tolérance de défaut sur le champ de salaire pour montrer comment cela se fait. Si vous remarquez, vous devez également fermer le flux d'entrée .. Profitez :-)

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


0 commentaires

4
votes

Comme il est long et que les gens continuent à suggérer d'utiliser scanner # nextline () , il y a une autre chance que scanner puisse prendre des espaces inclus dans l'entrée.

< un href = "https://docs.oracle.com/javase/7/docs/api/java/util/scanner.html" rel = "NOFOOLER NOREFERRER"> Scanner de classe

Un scanner brise son entrée en jetons à l'aide d'un motif de délimitation, qui correspond par défaut correspond à WhitSpace.

Vous pouvez utiliser scanner # adversaire () pour modifier le délimiteur de scanner à un autre motif tel qu'un flux de ligne ou quelque chose d'autre. xxx


0 commentaires

3
votes

J'ai trouvé une chose très étrange dans Java aujourd'hui, donc ça va comme -

Si vous entrez plus d'une chose de l'utilisateur , disons xxx < / Pré>

Donc, on pourrait ressembler si nous exécutons ce programme, il demandera ces 3 entrées et dire que nos valeurs d'entrée sont de 10, 2,5, "Bienvenue à Java" Le programme doit imprimer ces 3 valeurs tel qu'il est, comme nous l'avons utilisé NextLiche () afin de ne pas ignorer le texte après les espaces que nous avons entrés dans notre variable s

Mais, la sortie que vous obtiendrez est - xxx

et c'est tout, il n'abotte même pas l'entrée de la chaîne. Maintenant, je lisais à ce sujet et d'être très honnête, il y a encore des lacunes dans ma compréhension, tout ce que je pouvais comprendre était après avoir pris l'entrée INT, puis la double entrée lorsque nous appuyez sur Entrée, il considère que comme l'invite et ignore le nextline ().

modifie donc mon code à quelque chose comme ça - xxx

est parfaitement lié à quelque chose comme "\ n "Étant stocké dans le tampon de clavier dans l'exemple précédent que nous pouvons contourner en utilisant ceci.

S'il vous plaît si quelqu'un sait m'aider avec une explication pour cela.


1 commentaires

Au cas où vous seriez toujours curieux: geeksforgeeks.org/...