Avatar billede tbrg Novice
06. august 2003 - 12:06 Der er 6 kommentarer og
1 løsning

Læsning af danske tegn (æ, ø og å) fra tastatur

Jeg har en metode readString(), der skal læse et input fra tastatur. Det kan den også godt. Problemet er at danske specialtegn som æ, ø, å, Æ, Ø og Å åbenbart ikke bliver registreret.
Hvis jeg indtaster f.eks "kælder sø båd" og skriver den returnerede String ud, får jeg kun "klder s bd".
Hvordan får jeg det hele med?

Metoden ser sådan ud:

public static String readString()
{
  int ch;
  String r = "";
  boolean done = false;
  while (!done)
  { 
    try
    { 
        ch = System.in.read();
        if (ch < 0 || (char)ch == '\n')
          done = true;
          else if ((char)ch != '\r')
              r = r+ (char) ch;
    }
    catch(java.io.IOException e)
    {
    done = true;
    }
  }
  return r;
}
Avatar billede arne_v Ekspert
06. august 2003 - 12:15 #1
Jeg er overbevist om at den kode fint læser ÆØÅ.

Men at dit problem kommer fra forskellige ÆØÅ konventioner.

DOS versus Windows, ISO-8859-1 versus UTF-8 etc.
Avatar billede arne_v Ekspert
06. august 2003 - 12:23 #2
Hmm.

Og dog.

Følgende lille test-program:

import java.io.InputStreamReader;
import java.io.BufferedReader;

public class TestRead {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s1 = readString();
        System.out.println(s1);
        String s2 = br.readLine();
        System.out.println(s2);
    }
    public static String readString() {
        int ch;
        String r = "";
        boolean done = false;
        while (!done) {
            try {
                ch = System.in.read();
                if (ch < 0 || (char) ch == '\n')
                    done = true;
                else if ((char) ch != '\r')
                    r = r + (char) ch;
            } catch (java.io.IOException e) {
                done = true;
            }
        }
        return r;
    }
}

virker helt fint i en IDE.

Men i en DOS box er det kun den builtin readLine der virker - din
readString virker ikke.
Avatar billede arne_v Ekspert
06. august 2003 - 12:23 #3
Er der nogen speciel grund til at du ikke bruger readLine ?
Avatar billede arne_v Ekspert
06. august 2003 - 12:38 #4
Jeg har eksperimenteret lidt.

System.in.read synes ikke at være særligt god til at læse ÆØÅ med.

Brug readLine.

Husk at det du læser stadigvæk er enten DOS eller Windows ÆØÅ.
Avatar billede tbrg Novice
06. august 2003 - 12:41 #5
Mange tak for hjælpen. Jeg vil sidde og eksperimentere lidt med det.
Avatar billede tbrg Novice
06. august 2003 - 12:42 #6
arne v: fik du pointene?
Avatar billede arne_v Ekspert
06. august 2003 - 12:43 #7
Der ser sådan ud.

Tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester