Это происходит потому, что ваш входной терминал не поддерживает UTF-8 или входной формат не является UTF-8, поэтому лямбда отображается на 0. Используйте терминал, который поддерживает UTF-8.
Даже так имейте в виду, что некоторые символы UTF-8, такие как λ
, будут занимать два байта, поэтому ваш код для l oop будет разбит с этой точки (он будет печатать второй байт лямбды рядом с "a", байтом «a» рядом с «.» и т. д., и в конце вы получите исключение, потому что попытаетесь получить доступ к .charAt (6), поскольку длина cmdBytes равна 7):
> (λa.a)
0: 40 "("
1: -50 "λ"
2: -69 "a"
3: 97 "."
4: 46 "a"
5: 97 ")"
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.String.charAt(String.java:658)
at App.main(App.java:14)
Изменение byte[] cmdBytes = cmd.getBytes("UTF-8");
на char[] cmdBytes = cmd.toCharArray();
должно сделать эту работу. Просто помните, что символ 'λ' будет по-прежнему занимать два байта.
> (λa.a)
0: 40 "("
1: 955 "λ"
2: 97 "a"
3: 46 "."
4: 97 "a"
5: 41 ")"