Обе части делал по одной схеме. Нашёл проверку на символы matches, проверил на пустоту.
И дальше тупо скопировав решения из предыдущих задач через десятичное число.
toHex(String) - валидатор прошёл
toBinary(String) - пока нет
Потыкал разные варианты, вроде бы всё работает. Переделывать через массив или коллекции пока не хочу.
Вдруг поможет кто?
Спасибо!
package com.javarush.task.pro.task09.task0908;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
private static final String HEX = "0123456789abcdef";
public static void main(String[] args) {
String binaryNumber = "0";// "100111010000";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "0"; //"9d0";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
if(binaryNumber == null || binaryNumber.equals("") || binaryNumber.matches("[0-1]+") == false ) {
return "";
}
else {
int binToDec = 0;
for(int i = 0; i < binaryNumber.length(); i++){
binToDec +=(Character.getNumericValue(binaryNumber.charAt(binaryNumber.length() - i - 1))) * Math.pow(2,i);
}
String decToHex = "";
while(binToDec != 0){
decToHex = HEX.charAt(binToDec%16) + decToHex;
binToDec = binToDec/16;
}
return decToHex;
}
}
public static String toBinary(String hexNumber) {
//проверяем на нУль, пустую строку и запрещенные символы
if (hexNumber == null || hexNumber.equals("") || (hexNumber.matches("[0-9a-f]+") == false)) {
return "";
}
// выполняем перевод (скопировал решение из ранее решенных задач сначала в десятеричное, потом в двоичное)
else {
int hexToDec = 0;
for(int i = 0; i < hexNumber.length(); i++){
char a = hexNumber.charAt(i);
hexToDec = 16 * hexToDec + HEX.indexOf(a);;
}
String decToDva = "";
while(hexToDec != 0){
decToDva = hexToDec%2 + decToDva;
hexToDec = hexToDec/2;
}
return decToDva;
}
}
}