Java String.format - как поставить пробел между двумя символами - PullRequest
1 голос
/ 15 июня 2019

Я ищу способ использовать форматировщик, чтобы поставить пробел между двумя символами. я думал, что это будет легко с форматированием строки.

вот что я пытаюсь сделать:

дано: "AB" будет производить "A B"

Вот что я пробовал до сих пор:

"AB".format("%#s")

но это продолжает возвращать "AB", я хочу "A B". я думал, что знак числа можно использовать для пробела.

Я тоже попробовал это:

"26".format("%#d") but its still prints "26"

в любом случае это можно сделать с помощью string.formatter.

Ответы [ 2 ]

1 голос
/ 15 июня 2019

Это возможно с помощью строкового форматера, но не напрямую с шаблоном.

jshell> String.format("%1$c %2$c", "AB".chars().boxed().toArray())
$10 ==> "A B"

Нам нужно превратить строку в массив объектов, чтобы ее можно было передавать в виде переменных, а шаблон форматирования мог извлекать символы на основе индекса (1$ и 2$) и форматировать их как символы (c). .

Гораздо более простым решением регулярных выражений является следующее, которое масштабируется до любого количества символов:

jshell> "ABC^&*123".replaceAll(".", "$0 ").trim()
$3 ==> "A B C ^ & * 1 2 3"

Все одиночные символы заменяются на себя ($0), за которым следует пробел. Затем последний лишний пробел удаляется с помощью вызова trim().

1 голос
/ 15 июня 2019

Я не смог найти способ сделать это, используя String#format. Но вот способ сделать это с помощью замены регулярных выражений:

String input = "AB";
String output = input.replaceAll("(?<=[A-Z])(?=[A-Z])", " ");
System.out.println(output);

Шаблон регулярного выражения (?<=[A-Z])(?=[A-Z]) будет соответствовать каждой позиции между двумя заглавными буквами и интерполировать пробел в этой точке. Вышеприведенный скрипт печатает:

A B
...