Прошу помощи.
package com.javarush.task.pro.task09.task0908;
/*
Двоично-шестнадцатеричный конвертер
*/
import java.util.HashMap;
import java.util.Map;
public class Solution {
public static final String[] BINARY_NUMBER = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
public static final char[] HEX_NUMBER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
public static final Map<String, Character> INDEX_BINARY = new HashMap<>();
public static final Map<Character, String> INDEX_HEX = new HashMap<>();
static {
for (int i = 0; i < BINARY_NUMBER.length; i++) {
INDEX_BINARY.put(BINARY_NUMBER[i], HEX_NUMBER[i]);
INDEX_HEX.put(HEX_NUMBER[i], BINARY_NUMBER[i]);
}
}
public static void main(String[] args) {
String binaryNumber = "100111010000";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "9d0";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
String hexNumber = "";
if (binaryNumber == null) return hexNumber;
String s = binaryNumber.replaceAll("[0-1]", "");
if (!s.isEmpty()) {
return hexNumber;
}
if(binaryNumber.length() % 4 != 0){
binaryNumber = "0".repeat((int)Math.ceil(binaryNumber.length() / 4.0)) + binaryNumber;
}
String[] strArray = new String[binaryNumber.length() / 4];
int start = 0;
int end = 4;
for (int i = 0; i < (binaryNumber.length() / 4); i++) {
strArray[i] = binaryNumber.substring(start, end);
String binary = strArray[i];
if (INDEX_BINARY.containsKey(binary)) {
char newIndex = INDEX_BINARY.get(binary);
hexNumber = hexNumber + newIndex;
}
start += 4;
end += 4;
}
return hexNumber;
}
public static String toBinary(String hexNumber) {
String binaryNumber = "";
if (hexNumber == null) return binaryNumber;
String s = hexNumber.replaceAll("[0-9a-f]", "");
if (!s.isEmpty()) {
return binaryNumber;
}
for (int i = 0; i < hexNumber.length(); i++) {
char hex = hexNumber.charAt(i);
if (INDEX_HEX.containsKey(hex)) {
String newIndex = INDEX_HEX.get(hex);
binaryNumber = binaryNumber + newIndex;
}
}
return binaryNumber;
}
}