1. Если ввести пустую строку, возвращается пустая строка
2. Если ввести строку, которая содержит что-то кроме 0-9 или A-F, возвращается пустая строка
3. Метод возвращает корректное значение
Что не так?
package com.javarush.task.pro.task09.task0908;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
public static void main(String[] args) {
String binaryNumber = "000100111010000";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "123";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
//напишите тут ваш код
String HEX = "0123456789abcdef";
String hex = "";
if (binaryNumber == null) {
return hex;
}
int decimal = 0;
for (int i = 0; i < binaryNumber.length(); i++) {
int index = binaryNumber.length() - 1 - i;
decimal = (int) (decimal + Character.getNumericValue(binaryNumber.charAt(index)) * Math.pow(2, i));
}
while (decimal != 0) {
int idx = decimal % 16;
hex = HEX.charAt(idx) + hex;
decimal = decimal / 16;
}
return hex;
}
public static String toBinary(String hexNumber) {
//напишите тут ваш код
String bin = "";
if (hexNumber == null || !(hexNumber.matches("[0-9a-f]+"))) {
return bin;
}
while (hexNumber.length() % 4 != 0) {
hexNumber = 0 + hexNumber;
}
String HEX = "0123456789abcdef";
int decimal = 0;
for (int i = 0; i < hexNumber.length(); i++) {
decimal = 16 * decimal + HEX.indexOf(hexNumber.charAt(i));
}
if (decimal == 0) {
bin = "0000";
return bin;
}
while (decimal != 0) {
bin = (decimal % 2) + bin;
decimal = decimal / 2;
}
return bin;
}
}

Теперь метод добавляет нули, если входной параметр не кратен 4, и возвращает 0000, если передать 0.
Я не знаю, как решить проблему недобавленных нулей, да и в условиях такого требования нет. Полученное двоичное значение 100100011 корректно конвертируется обратно в 123.