Java несколько циклов
Подскажите как вывести напротив каждой буквы s её значение z?
Сейчас для каждого символа s выводится весь пул z.
String s = "Hello!";
byte[] z = s.getBytes(StandardCharsets.UTF_8);
char[] ch = new char[s.length()];
for (int i = 0; i < s.length(); i++) {
ch[i] = s.charAt(i);
for (byte b : z) {
System.out.println(ch[i] + " Значение символа: " + b );
}
}
Ответы (2 шт):
Автор решения: Дмитрий
→ Ссылка
А зачем столько циклов? Так должно работать:
String s = "Hello!";
byte[] z = s.getBytes(StandardCharsets.UTF_8);
for (int i = 0; i < s.length(); i++) {
System.out.println(s.charAt(i) + " Значение символа: " + z[i]);
}
Автор решения: Stanislav Volodarskiy
→ Ссылка
Ваша ошибка состоит в том что для каждого символа вы выводите не только его байты но и байты всей строки.
В Java символ может задаваться несколькими байтами. Нужно переводить строку в байты посимвольно и для каждого символа выводить все байты. И это ещё без упоминания суррогатных пар:
import java.nio.charset.StandardCharsets;
public class CharBytes {
public static void main(String ... args) {
for (String arg : args) {
System.out.println();
System.out.println(arg);
for (int i = 0; i < arg.length(); ++i) {
char c = arg.charAt(i);
byte[] bytes = String.valueOf(c).getBytes(
StandardCharsets.UTF_8
);
System.out.print("'" + c + "':");
for (byte b : bytes) {
System.out.print(" " + b);
}
System.out.println();
}
}
}
}
$ javac CharBytes.java && java CharBytes Hello! Привет! Hello! 'H': 72 'e': 101 'l': 108 'l': 108 'o': 111 '!': 33 Привет! 'П': -48 -97 'р': -47 -128 'и': -48 -72 'в': -48 -78 'е': -48 -75 'т': -47 -126 '!': 33