Не проходит второе условие, но переводит верно. Есть подозрение, что валидатор не доволен проверкой "hexNumber.matches("[0123456789abcdef]+$". Народ кто шарит подскажите 😵😵
package com.javarush.task.pro.task09.task0908;
import java.util.regex.Matcher;
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 = "9d0";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
if ((binaryNumber == null) || ("".equalsIgnoreCase(binaryNumber))) {
return "";
}
else if (!binaryNumber.matches("[01]+$")) // проеверяем проверяем содержит ли символы 0-1
{
return "";
}
return toHexSix(toDecimalTen(binaryNumber));
}
public static String toBinary(String hexNumber) {
if ((hexNumber == null) || ("".equalsIgnoreCase(hexNumber)))
return "";
else if (!hexNumber.matches("[0123456789abcdef]+$")) // проверяем содержит ли символы 0-9 и a-f
{
return "";
}
else return toBinary(toDecimalSixTen(hexNumber));
}
// Метод для перевода двоичного в десятичное
public static int toDecimalTen(String binaryNumber) {
int decimal = 0;
if (binaryNumber == null) {
return decimal;
}
for (int i = 0; i < binaryNumber.length(); i++) {
int index = binaryNumber.length() - 1 - i;
decimal = decimal + (binaryNumber.charAt(index) - '0') * ((int) Math.pow(2, i));
}
return decimal;
}
// Метод для перевода десятичного в 16ричную строку
public static String toHexSix(int decimalNumber) {
String six = "";
while (decimalNumber > 0) {
six = HEX.charAt(decimalNumber % 16) + six;
decimalNumber = decimalNumber / 16;
}
return six;
}
// Метод для перевода 16ричное в 10чное
public static int toDecimalSixTen(String hexNumber) {
int ten = 0;
if ((null == hexNumber) || ("".equalsIgnoreCase(hexNumber))) {
return 0;
}
for (int i = 0; i < hexNumber.length(); i++) {
ten = 16 * ten + (HEX.indexOf(hexNumber.charAt(i)));
}
return ten;
}
// Метод для перевода десятичного в двоичную
public static String toBinary(int decimalNumber) {
String digit = "";
while (decimalNumber > 0) {
digit = decimalNumber % 2 + (digit);
decimalNumber = decimalNumber / 2;
}
return digit;
}
}