Konwersja String

0

Witam

Mam problem z prostym przetwarzaniem Stringa. Przytoczony fragment kodu jest uproszczeniem problemu, który występuje w innym większym projekcie.

W konsoli wczytuje znak (System.in.read()). Wprowadzam znak np. ą. Następnie wyświetlam sobie wartość, którą otrzymałem po wczytaniu czyli 185.

Teraz ten sam wynik chcę uzyskać dla zmiennej String znak = "ą". Jak przetworzyć tego stringa tak, żeby dla ą uzyskać wartość 185? Podobnie dla ś wartość 156, dla ć wartość 230 itd.

Poniżej kod.

import java.io.IOException;


public class Przetwarzanie_znakow {

	public static void main(String[] args) {

		System.out.print("Podaj znak: ");
		int wczytany_znak = 0;
		try {
			wczytany_znak = System.in.read();
		} catch (IOException exp) {
			exp.printStackTrace();
		}
		System.out.println("Po wczytaniu otrzymałem: " + wczytany_znak);
		
		int przetworzony_znak = 0;
		String znak = "ą";
		
		// co tutaj powinno być, żeby uzyskać ten sam wynik co dla System.in.read() ???
				
		System.out.println("Po przetwarzaniu Stringa otrzymałem: " + przetworzony_znak);
	}

}

Proszę o pomoc.

0

Dlaczego uważasz, że 185 jest poprawne? Liczba ta zależy od kodowania (strony kodowej). Konsola ma odmienne kodowanie.

0

Właśnie ten rodzaj kodowania jest mi potrzebny w projekcie. Jak go uzyskać dla Stringa?

0

String.charAt(0)

0

String.charAt(0) - niestety ta metoda zwraca zupełnie inne wartości

0
	String dupa = "ą";
	byte[] b = dupa.getBytes("jakies kodowanie");
	
	int n = 0;
	if(b.length>1)
		n = (b[0]&0xFF) << 8 | (b[1]&0xFF);
	else if(b.length>0)
		n = b[0]&0xFF;
	
	System.out.println(n);
0

Działa. Dzięki.

Czy kolega może rozwinąć z czego wynika ten fragment kodu:

        if(b.length>1)
                n = (b[0]&0xFF) << 8 | (b[1]&0xFF);
        else if(b.length>0)
                n = b[0]&0xFF;	

1 użytkowników online, w tym zalogowanych: 0, gości: 1