Рещил задачу, проверил на разных значениях, в т.ч. некорректных, в IDEA всё работает, но первые 2 условия не пропускает. Please help.
package com.javarush.task.pro.task09.task0908;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
private static final String HEX = "0123456789abcdef";
private static final String[] BINARY = {"0000", "0001", "0010", "0011", "0100", "0101", "0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110", "1111"};
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) {
if (binaryNumber == null || binaryNumber.isEmpty()) return "";
for (int i = 0; i < binaryNumber.length(); i++) {
if (binaryNumber.charAt(i) != '0' && binaryNumber.charAt(i) != '1') return "";
}
while (binaryNumber.length() % 4 == 0) {
binaryNumber += '0';
}
String result = "";
for (int i = 0; i < binaryNumber.length() - 1; i += 4) {
String temp = binaryNumber.substring(i, i + 4);
int index = Arrays.asList(BINARY).indexOf(temp);
result += HEX.charAt(index);
}
return result;
}
public static String toBinary(String hexNumber) {
Pattern pattern = Pattern.compile("[0-9a-f]+");
Matcher matcher = pattern.matcher(hexNumber);
if (hexNumber == null || hexNumber.isEmpty() || !matcher.find()) return "";
String result = "";
for (int i = 0; i < hexNumber.length() ; i++) {
int index = HEX.indexOf(hexNumber.charAt(i));
result += BINARY[index];
}
return result;
}
}