



Одним из подходов было бы использование класса 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}) разбивает строку на пары символов с помощью LookBehind (?<=\G.{2}) и вставляет в последовательность ":" между этими парами, за исключением последней пары (?!$). ).
String originalString = "48a493d902b5";
String formatedString = originalString.replaceAll("(?<=\\G.{2})(?!$)", ":");
System.out.println(formatedString);
альтернатива: replaceAll("(..)(?=.)", "$1:")
Мне понравился этот подход, но чего-то не хватает. Результатом было «48:a493d902b5».
Альтернатива работает нормально. Спасибо
Вы также можете рассмотреть следующее:
(..) захватить все экземпляры, состоящие из двух цифр, с обратной ссылкой, за которой следует двоеточие.(?!$) — игнорировать конец пар строк.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
Вы также можете сделать шаг на 2 и использовать StringBuilder.append(CharSequence,int,int) для добавления двухсимвольных подпоследовательностей.