Проблемы со строкой в java (Android)

58
5

Когда я запускаю это (это часть приложения для Android), он работает.

String[] hex = new String[6];
hex[0] = "A4";
hex[1] = "8A";
hex[2] = "5B";
hex[3] = "9O";
hex[4] = "U4";
hex[5] = "D8";

if (hex.length != 6) {
throw new IllegalArgumentException("Invalid MAC address.");
}
try {
for (int i = 0; i < 6; i++) {
bytes[i] = (byte) Integer.parseInt(hex[i], 16);
}
}
catch (NumberFormatException e) {
throw new IllegalArgumentException("Invalid hex digit in MAC address.");
}

Но если я это сделаю:

String[] hex = macStr.split("(\\:|\\-)"); 

if (hex.length != 6) {
throw new IllegalArgumentException("Invalid MAC address.");
}
try {
for (int i = 0; i < 6; i++) {
bytes[i] = (byte) Integer.parseInt(hex[i], 16);
}
}
catch (NumberFormatException e) {
throw new IllegalArgumentException("Invalid hex digit in MAC address.");
}

Это не работает... Я пытался найти бит проблемы, кажется, что первый шестнадцатеричный код не совпадает со вторым; но если я делаю println, они кажутся идентичными.

спросил(а) 2015-01-24T01:01:00+03:00 5 лет, 9 месяцев назад
1
Решение
100

вы анализируете адрес mac в форме xx-xx-xx-xx-xx-xx или yy:yy:yy:yy:yy:yy ваш метод split работает. Но здесь вы можете пропустить инициализацию массива. Массив - фиксированная длина. он должен быть определен с размером.

byte[] bytes;
String macStr="ab:ab-cd:ab:ab-cd";
String[] hex = macStr.split("(\\:|\\-)");
System.out.println(hex.length);
if (hex.length != 6) {
throw new IllegalArgumentException("Invalid MAC address.");

}
try {
bytes=new byte[6];
for (int i = 0; i < 6; i++) {

bytes[i] = (byte) Integer.parseInt(hex[i], 16);
}
}
catch (NumberFormatException e) {
throw new IllegalArgumentException("Invalid hex digit in MAC address.");
}

ответил(а) 2015-01-24T01:24:00+03:00 5 лет, 9 месяцев назад
41

Используйте masStr.split("[:\\-]") для разделения символов "-" и ":".


Если он не работает (я просто проверял его на всякий случай - он работает) - проверьте свои данные

ответил(а) 2015-01-24T01:22:00+03:00 5 лет, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема