Obtenir l'entrée du scanner Java sans faire progresser le scanner

Noah Wilder

Tirez parti de la valeur du scanner sans l'avancer - Java

Je veux obtenir la valeur de l'entrée dans le scanner sans l'avancer. Actuellement, j'utilise l'entrée de mes scanners comme System.in.

final var sc = new Scanner(System.in);

Je connais les hasNextméthodes sur le scanner, et elles sont actuellement mon meilleur / seul moyen de vérifier son entrée sans l'avancer.

Voici comment j'assure une entrée intégrale positive scpar exemple.

public static int getPositiveIntegerInput(Scanner sc) {
    System.out.println("Please input a positive integer");
    sc.useDelimiter("\n");
    while (!sc.hasNextInt() || sc.hasNext(".*[^\\d].*")) {
        System.out.println("Invalid input, please try again");
        sc.nextLine();
    }
    return sc.nextInt();
}

Je veux étendre cette notion de vérification scde l'entrée de sans l'avancer pour obtenir réellement scl'entrée de sans l'avancer.

Ce que j'ai essayé jusqu'à présent

J'ai parcouru les détails de mise en œuvre de hasNext()sur Scanner.

Mise en œuvre de hasNext:

public final class Scanner {

    public boolean hasNext(Pattern pattern) {
        ensureOpen();
        if (pattern == null)
            throw new NullPointerException();
        hasNextPattern = null;
        saveState();
        modCount++;

        while (true) {
            if (getCompleteTokenInBuffer(pattern) != null) {
                matchValid = true;
                cacheResult();
                return revertState(true);
            }
            if (needInput)
                readInput();
            else
                return revertState(false);
        }
    }
}

Il m'a semblé au moins que l'on peut obtenir les données du scanner à partir de la méthode getCompleteTokenInBuffer, mais vraiment je ne comprends pas vraiment comment cela fonctionne. Je ne sais pas si cette méthode à elle seule obtient la valeur du scanner sans l'avancer, ou si elle l'avance, quelque chose d'autre le ramène à l'état dans lequel elle était avant l'entrée comme si elle n'avait pas avancé du tout, ou si l'obtient en combinaison avec autre chose, ou vraiment comment du tout.

J'ai joué avec l'invocation des méthodes privées Scannervia l'API de réflexion de Java, pour essayer de renvoyer la scvaleur d'entrée du jeton contenant des méthodes sans réellement faire avancer les méthodes (mais pour être honnête, je joue juste avec elle et je ne sais pas comment accomplir réellement ce que je veux faire).

public static void main(String[] args) {

    final var sc = new Scanner(System.in);
    sc.useDelimiter("\n");

    var str = "";

    try {
        Method method = Scanner.class.getDeclaredMethod("getCompleteTokenInBuffer", Pattern.class);
        method.setAccessible(true);
        str = (String) method.invoke(sc, Pattern.compile(".*"));
    } catch (Exception e) {
        System.out.println("Well, that didn't work!");
        System.out.println("Exception: " + e);
    }

    System.out.println("getCompleteTokenInBuffer: " + str);

    // Prints: "getCompleteTokenInBuffer: null"
}

Remarque: La méthode ci-dessus n'attend pas une entrée avant d'obtenir la valeur de sc's input et renvoie donc une valeur de null.

Objectif:

Juste pour répéter, j'aimerais trouver un moyen de capturer et de renvoyer Scannerla valeur d'entrée d' un objet en l'avançant réellement.

Daniel Nguyen

Ce que vous recherchez pourrait autrement être appelé une fonction peek.

Cette réponse sur un autre thread indique que vous pourriez être servi en créant une classe wrapper autour de Scanner qui implémente cette fonctionnalité, puisque la classe Scanner elle-même ne l'implémente pas.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

Lire l'entrée du scanner java

Difficile d'obtenir l'entrée du scanner

Essayer de trouver le nombre minimum dans l'entrée utilisateur du scanner en Java

Le scanner ne met pas à jour l'entrée lors du retour à la méthode Java

Utilisation du scanner de Java pour lire l'entrée

Java ne reconnaît pas l'entrée du scanner

Java: attribuer l'entrée du scanner à plusieurs variables?

Dupliquer le pansement du scanner pour faire le temps? (Java)

L'entrée du scanner est invisible

Entrée du scanner

Entrée du scanner BigInteger en Java

Validation d'entrée du scanner Java

Lecture d'entrée du scanner Java

Valider l'entrée utilisateur du scanner dans l'instruction if SANS variables

Comment faire un certain temps avant que le scanner ne reçoive l'entrée?

Comment obtenir une entrée du scanner d'empreintes digitales et l'enregistrer

Le scanner Java n'accepte pas l'entrée lorsque vous appuyez sur Entrée

Comment faire en sorte que le scanner Java reconnaisse une entrée vide?

Existe-t-il un moyen d'obtenir une entrée d'un scanner sans le déclarer?

Obtenir des entrées du scanner de codes-barres en interne sans zone de texte

Incompatibilité d'entrée du scanner Java lors de l'utilisation de l'espace en entrée

Java utilisant la touche Entrée du scanner enfoncée

Comment masquer le texte d'entrée du scanner?

comment prendre l'opérateur Char/arithmétique comme entrée de l'utilisateur sans utiliser le scanner

Passage de l'entrée du scanner dans une ArrayList

Utilisation de \ t regex avec l'entrée du scanner

Comptage incrémentiel à partir de l'entrée du scanner

Appeler un objet avec l'entrée utilisateur du scanner?

Comment remplir un tableau 2D en utilisant l'entrée (méthode du scanner) sans espaces

TOP liste

  1. 1

    comment afficher un bouton au-dessus d'un autre élément ?

  2. 2

    impossible d'obtenir l'image d'arrière-plan en plein écran dans reactjs

  3. 3

    Je continue à obtenir l'objet 'WSGIRequest' n'a pas d'attribut 'Get' sur django

  4. 4

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  5. 5

    Conversion double en BigDecimal en Java

  6. 6

    Impossible d'accéder à la vue personnalisée pendant le test de l'interface utilisateur dans XCode

  7. 7

    Algorithme: diviser de manière optimale une chaîne en 3 sous-chaînes

  8. 8

    Passer la taille d'un tableau 2D à une fonction ?

  9. 9

    Comment obtenir l'intégration contextuelle d'une phrase dans une phrase à l'aide de BERT ?

  10. 10

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  11. 11

    CSS: before ne fonctionne pas sur certains éléments,: after fonctionne très bien

  12. 12

    Comment créer un bot à compte à rebours dans Discord en utilisant Python

  13. 13

    Comment ajouter une entrée à une table de base de données pour une combinaison de deux tables

  14. 14

    Exporter la table de l'arborescence vers CSV avec mise en forme

  15. 15

    Comment activer le message Pylint "too-many-locals" dans VS Code?

  16. 16

    Créer un système Buzzer à l'aide de python

  17. 17

    Spring @RequestParam DateTime format comme ISO 8601 Date Heure facultative

  18. 18

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  19. 19

    Déplacement des moindres carrés d'ajustement pour les déplacements de points ayant des problèmes

  20. 20

    Comment choisir le nombre de fragments et de répliques Elasticsearch

  21. 21

    Microsoft.WebApplication.targets

chaudétiquette

Archive