Ответ 1
Строки основаны на 0, поэтому вы должны проходить через String от 0 до < длина строки, но indexOf(...)
- это не то, что вы хотите использовать, так как это будет искать местоположение в строках небольших ints, что не имеет смысла. Вам все равно, где char эквивалент 2 находится в String или даже если он вообще находится в String.
Вместо этого вы хотите использовать charAt(...)
или subString(...)
, а затем разобрать на int. Я бы использовал
for (int i = 0; i < binary.length(); i++) {
int whatNumber = charAt(i) - '0'; // converts a numeric char into it int
//...
Чтобы узнать, что это делает, создайте и запустите:
public class CheckChars {
public static void main(String[] args) {
String foo = "0123456789";
for (int i = 0; i < foo.length(); i++) {
char myChar = foo.charAt(i);
int actualIntHeld = (int) myChar;
int numberIWant = actualIntHeld - '0';
System.out.printf("'%s' - '0' is the same as %d - %d = %d%n",
myChar, actualIntHeld, (int)'0', numberIWant);
}
}
}
Что возвращает:
'0' - '0' is the same as 48 - 48 = 0
'1' - '0' is the same as 49 - 48 = 1
'2' - '0' is the same as 50 - 48 = 2
'3' - '0' is the same as 51 - 48 = 3
'4' - '0' is the same as 52 - 48 = 4
'5' - '0' is the same as 53 - 48 = 5
'6' - '0' is the same as 54 - 48 = 6
'7' - '0' is the same as 55 - 48 = 7
'8' - '0' is the same as 56 - 48 = 8
'9' - '0' is the same as 57 - 48 = 9
Цифры, представляющие символы, основаны на старой таблице ASCII, которая дает каждому символу числовое представление. Подробнее об этом см. Здесь Таблица ASCII