Sprejemanje vnosa znakov iz optičnega bralnika

Poskušam najti način za vnos znakov s tipkovnice.

Poskušal sem uporabiti:

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

Ta metoda ne obstaja.

Poskusil sem vzeti c kot string. Vendar to ne bi vedno delovalo v vsakem primeru, saj druga metoda, ki jo kličem iz svoje metode, zahteva kot vhodni podatek znak. Zato moram najti način, kako izrecno sprejeti znak kot vhod.

Kakršna koli pomoč?

Rešitev

Prvi znak lahko vzamete iz Scanner.next:

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

Če želite porabiti točno en znak, lahko uporabite:

char c = reader.findInLine(".").charAt(0);

Če želite porabiti strogo en znak, lahko uporabite:

char c = reader.next(".").charAt(0);
Komentarji (12)

Za pridobitev znaka iz optičnega bralnika ni metode API. Vrstico morate dobiti z uporabo metode scanner.next() in na vrnjeni vrstici uporabiti metodo String.charAt(0).

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

Za varnost pri belih presledkih lahko najprej pokličete trim() na niz, da odstranite vse bele presledke.

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

Te težave se lahko lotite na tri načine:

  • Če želite prebrati preostanek vrstice kot znake, iterirajte po preostalih znakih v nizu. Drugi odgovori imajo to kodo.

  • Uporabite setDelimiter(""), da nastavite ločilo na prazen niz. To bo povzročilo, da bo next() opravil tokenizacijo v nize, ki so dolgi natanko en znak. Tako lahko nato večkrat pokličete next().charAt(0) za iteracijo znakov. Nato lahko nastavite ločilo na prvotno vrednost in nadaljujete s pregledovanjem na običajen način!

  • Uporabite API bralnika namesto API optičnega bralnika. Metoda Reader.read() zagotovi branje enega znaka iz vhodnega toka. Na primer:

    Reader reader = new InputStreamReader(System.in);
    int ch = reader.read();
    if (ch != = -1) { // preveri, ali ni EOF
        // imamo znak ...
    }

Pri branju iz konzole prek System.in vhodni podatek običajno shrani operacijski sistem in ga "sprosti" aplikaciji šele, ko uporabnik vnese ENTER. Če torej nameravate, da se bo vaša aplikacija odzivala na posamezne udarce po tipkovnici, to ne bo delovalo. Za to bi morali narediti nekaj stvari, ki so značilne za operacijski sistem, da bi izklopili ali obšli predpomnilnik vrstic za konzolo na ravni operacijskega sistema.

Sklic:

Komentarji (1)