Как преобразовать «48a493d902b5» в «48:a4:93:d9:02:b5» в Java?

У меня есть строка «48a493d902b5», но мне нужно преобразовать ее в «48:a4:93:d9:02:b5». Я мог бы построить структуру while, но не знаю, лучший ли это подход.

Можно ли использовать для этого Regex? Если да, то как я могу это сделать?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
79
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Одним из подходов было бы использование класса StringBuilder. Я предполагаю, что вам нужно иметь несколько строк, которые будут преобразованы в формат, включающий «:». Примером такой функции может быть:

public String convertToFormat(String input) {
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < input.length(); i++) {
    if (i > 0 && i % 2 == 0) {
      sb.append(":");
    }
    sb.append(input.charAt(i));
  }
  return sb.toString();
}
String firstVersion = "48a493d902b5";
String newVersion = convertToFormat(firstVersion);
System.out.println(newVersion);

Вы также можете сделать шаг на 2 и использовать StringBuilder.append(CharSequence,int,int) для добавления двухсимвольных подпоследовательностей.

Andy Turner 05.04.2024 00:54
Ответ принят как подходящий

Да, можно использовать регулярное выражение. Это выражение (.{2}) разбивает строку на пары символов с помощью LookBehind (?<=\G.{2}) и вставляет в последовательность ":" между этими парами, за исключением последней пары (?!$). ).

    String originalString = "48a493d902b5";
    String formatedString = originalString.replaceAll("(?<=\\G.{2})(?!$)", ":");
    System.out.println(formatedString);

альтернатива: replaceAll("(..)(?=.)", "$1:")

user85421 04.04.2024 23:48

Мне понравился этот подход, но чего-то не хватает. Результатом было «48:a493d902b5».

Alessandro Nunes Bertoni 04.04.2024 23:52

Альтернатива работает нормально. Спасибо

Alessandro Nunes Bertoni 04.04.2024 23:56

Вы также можете рассмотреть следующее:

  • (..) захватить все экземпляры, состоящие из двух цифр, с обратной ссылкой, за которой следует двоеточие.
  • (?!$) — игнорировать конец пар строк.
String s = "48a493d902b5";
String  s1 = s.replaceAll("(..)(?!$)","$1:");
System.out.println(s1);

принты

48:a4:93:d9:02:b5

Для подобных конструкций вы можете проверить HexFormat

Например, вы можете указать разделитель и изменить регистр. Здесь используется BigInteger для преобразования шестнадцатеричной строки в массив байтов.

String s = "48a493d902b5a792f3FF821234aabc3123";
BigInteger bigInt = new BigInteger(s, 16);
String result = HexFormat.ofDelimiter(":").withUpperCase()
        .formatHex(bigInt.toByteArray());
System.out.println(result);

принты

48:A4:93:D9:02:B5:A7:92:F3:FF:82:12:34:AA:BC:31:23


Другие вопросы по теме