[java] Prendi un input di carbone dallo scanner



Answers

Scanner di installazione:

reader.useDelimiter("");

Dopo questo reader.next() restituirà una stringa di un singolo carattere.

Question

Sto cercando di trovare un modo per prendere un input da tastiera.

Ho provato a usare:

Scanner reader = new Scanner(System.in);
char c = reader.nextChar();

Questo metodo non esiste.

Ho provato a prendere c come String . Tuttavia, non sempre funzionerebbe in ogni caso, poiché l'altro metodo che sto chiamando dal mio metodo richiede un char come input. Quindi devo trovare un modo per prendere esplicitamente un carattere come input.

Qualsiasi aiuto?




import java.util.Scanner;

public class userInput{
    public static void main(String[] args){
        // Creating your scanner with name kb as for keyBoard
        Scanner kb = new Scanner(System.in);

        String name;
        int age;
        char bloodGroup;
        float height;

        // Accepting Inputs from user
        System.out.println("Enter Your Name");
        name = kb.nextLine(); // for entire line of String including spaces
        System.out.println("Enter Your Age");
        age = kb.nextInt(); // for taking Int
        System.out.println("Enter Your BloodGroup : A/B/O only");
        bloodGroup  = kb.next().charAt(0); // For character at position 0
        System.out.println("Enter Your Height in Meters");
        height = kb.nextFloat(); // for taking Float value

        // closing your scanner object
        kb.close();

        // Outputting All
        System.out.println("Name : " +name);
        System.out.println("Age : " +age);
        System.out.println("BloodGroup : " +bloodGroup);
        System.out.println("Height : " +height+" m");

    }
}



Prova questo: char c = S.nextLine (). CharAt (0);




Esistono tre modi per affrontare questo problema:

  • Chiama next() sullo scanner ed estrai il primo carattere della stringa (ad es. charAt(0) ) Se vuoi leggere il resto della riga come caratteri, esegui una iterazione sui caratteri rimanenti nella stringa. Altre risposte hanno questo codice.

  • Usa setDelimiter("") per impostare il delimitatore su una stringa vuota. Questo farà sì che next() tokenize in stringhe che sono esattamente un carattere lungo. Quindi puoi chiamare ripetutamente next().charAt(0) per iterare i caratteri. È quindi possibile impostare il delimitatore sul suo valore originale e riprendere la scansione nel modo normale!

  • Utilizza l'API Reader anziché l'API Scanner. Il metodo Reader.read() fornisce un singolo carattere letto dal flusso di input. Per esempio:

    Reader reader = new InputStreamReader(System.in);
    int ch = reader.read();
    if (ch != -1) {  // check for EOF
        // we have a character ...
    }
    

Quando si legge dalla console tramite System.in , l'input viene in genere memorizzato nel buffer dal sistema operativo e solo "rilasciato" all'applicazione quando l'utente digita INVIO. Quindi, se intendi che la tua applicazione risponda ai singoli tratti della tastiera, non funzionerà. È necessario eseguire alcune operazioni di codice nativo specifiche del sistema operativo per disattivare o aggirare il buffer di linea per console a livello di sistema operativo.

Riferimento:




Basta usare ...

Scanner keyboard = new Scanner(System.in);<br>
char c = keyboard.next().charAt(0);

Questo è tutto...




Questo in realtà non funziona:

char c = reader.next().charAt(0);

Ci sono alcune buone spiegazioni e riferimenti in questa domanda: perché la classe Scanner non ha un metodo nextChar? "Uno scanner interrompe il proprio input in token usando un pattern delimitatore", che è piuttosto aperto. Ad esempio quando si utilizza questo

c = lineScanner.next().charAt(0);

per questa riga di input "(1 + 9) / (3 - 1) + 6 - 2" la chiamata al prossimo ritorna "(1", c sarà impostato su "(", e finirai col perdere il " 1 'alla prossima chiamata a successiva ()

Tipicamente quando vuoi ottenere un personaggio, vorresti ignorare lo spazio bianco. Questo ha funzionato per me:

c = lineScanner.findInLine("[^\\s]").charAt(0);

Riferimento: regex per abbinare un singolo carattere che è tutto tranne uno spazio




Per trovare l'indice di un personaggio in una determinata puntura, puoi usare questo codice:

package stringmethodindexof;

import java.util.Scanner;
import javax.swing.JOptionPane;

/**
 *
 * @author ASUS//VERY VERY IMPORTANT
 */
public class StringMethodIndexOf {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        String email;
        String any;
        //char any;

//any=JOptionPane.showInputDialog(null,"Enter any character or string to find out its INDEX NUMBER").charAt(0);       
//THE AVOBE LINE IS FOR CHARACTER INPUT LOL
//System.out.println("Enter any character or string to find out its INDEX NUMBER");
       //Scanner r=new Scanner(System.in);
      // any=r.nextChar();
        email = JOptionPane.showInputDialog(null,"Enter any string or anything you want:");
         any=JOptionPane.showInputDialog(null,"Enter any character or string to find out its INDEX NUMBER");
        int result;
        result=email.indexOf(any);
        JOptionPane.showMessageDialog(null, result);

    }

}



package Pack;

import java.util.Scanner;

public class test { 
    public static void main(String[] args) {

        Scanner reader = new Scanner(System.in);
        char c = reader.next(".").charAt(0);

    }
}

Per ottenere solo un carattere char c = reader.next ("."). CharAt (0);




import java.io.*;

class abc // enter class name (here abc is class name)
{
    public static void main(String arg[])
    throws IOException // can also use Exception
    {
        BufferedReader z =
            new BufferedReader(new InputStreamReader(System.in));

        char ch = (char) z.read();
    } // PSVM
} // class



Links