Вроде все правильно работает, и так и эдак вертела. Есть мысль, что это из-за того, что нет проверки на (от 0 до 9 )- так вроде других цифр и не существует. То есть мой метод сначала проверяет цифра ли это, а если нет, то уже остальные "дозволенные" символы предлагает, а если и они не подойдут - тогда пустая строка.
Хотя может вообще что-то другое упустила.
package com.javarush.task.pro.task09.task0908;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
public static void main(String[] args) {
String binaryNumber = "111010000";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "1d0";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
if (binaryNumber == null || binaryNumber.isEmpty()) return "";//напишите тут ваш код
char[] array = binaryNumber.toCharArray();
for (char s : array) {
if (s != '0' && s != '1') return "";
}
while (binaryNumber.length() % 4 != 0) binaryNumber = "0" + binaryNumber;
String hexNumber = "";
for (int i = 0; i < binaryNumber.length(); i = i + 4) {
int buf = 0;
int st = Character.getNumericValue(binaryNumber.charAt(i));
int st2 = Character.getNumericValue(binaryNumber.charAt(i + 1));
int st3 = Character.getNumericValue(binaryNumber.charAt(i + 2));
int st4 = Character.getNumericValue(binaryNumber.charAt(i + 3));
if (st == 1) buf = 8;
if (st2 == 1) buf = buf + 4;
if (st3 == 1) buf = buf + 2;
if (st4 == 1) buf = buf + 1;
if (buf == 10) hexNumber = hexNumber + "a";
else if (buf == 11) hexNumber = hexNumber + "b";
else if (buf == 12) hexNumber = hexNumber + "c";
else if (buf == 13) hexNumber = hexNumber + "d";
else if (buf == 14) hexNumber = hexNumber + "e";
else if (buf == 15) hexNumber = hexNumber + "f";
else hexNumber = hexNumber + buf;
}
return hexNumber;
}
public static String toBinary(String hexNumber) {
if (hexNumber == null || hexNumber.isEmpty()) return "";
String binaryNumber = "";
for (int i = 0; i < hexNumber.length(); i++) {
if (Character.isDigit(hexNumber.charAt(i))) {
int bin = Character.getNumericValue(hexNumber.charAt(i));
if (bin == 0) binaryNumber = binaryNumber + "0000";
else
while (bin > 0) {
binaryNumber = binaryNumber + bin % 2;
bin = bin / 2;
}
}
else if (hexNumber.charAt(i) == 'a') binaryNumber = binaryNumber + "1010";
else if (hexNumber.charAt(i) == 'b') binaryNumber = binaryNumber + "1011";
else if (hexNumber.charAt(i) == 'c') binaryNumber = binaryNumber + "1100";
else if (hexNumber.charAt(i) == 'd') binaryNumber = binaryNumber + "1101";
else if (hexNumber.charAt(i) == 'e') binaryNumber = binaryNumber + "1110";
else if (hexNumber.charAt(i) == 'f') binaryNumber = binaryNumber + "1111";
else return "";
}
return binaryNumber;
}
}