Пока остаётся последняя надежда лезть в решение не хочу. Но видимо уже скоро. Обычно валидатор прав и я видимо опять что то упустил. Переписал даже код метода заново.
package com.javarush.task.pro.task09.task0908;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
private static final String HEX = "0123456789abcdef";
public static void main(String[] args) {
String binaryNumber = "100111010000";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "1d0";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
if (binaryNumber == null) return "";
for (int i = 0; i < binaryNumber.length(); i++) {
char c = binaryNumber.charAt(i);
if (c != '0' && c != '1') return "";
}
int r = binaryNumber.length() % 4;
if (r != 0) {
for (int i = 0; i < 4 - r; i++) binaryNumber = "0" + binaryNumber;
}
String hex = "";
for (int i = 0; i < binaryNumber.length() / 4; i++) {
String bit = binaryNumber.substring(i * 4, i * 4 + 4);
int value = 0;
for (int l = 0; l < bit.length(); l++) {
value = Character.getNumericValue(bit.charAt(l)) + value * 2;
}
hex = hex + HEX.charAt(value);
}
return hex;
}
public static String toBinary(String hexNumber) {
if (hexNumber == null) return "";
for (int i = 0; i < hexNumber.length(); i++) {
char c = hexNumber.charAt(i);
if (HEX.indexOf(c) == -1) return "";
}
String bin = "";
if (hexNumber.equals("0")) return "0";
for (int i = 0; i < hexNumber.length(); i++) {
char c = hexNumber.charAt(hexNumber.length() - i - 1);
int dec = HEX.indexOf(c);
if (dec == 0) bin = "0000";
else {
for (int j = 0; j < 4; j++) {
bin = (dec % 2) + bin;
dec = dec / 2;
if (i == hexNumber.length() - 1 && dec == 0) break;
}
}
}
return bin;
}
}