Ищете быстрый и простой способ в Java, чтобы изменить эту строку
" hello there "
что-то похожее на это
"hello there"
где я заменяю все эти несколько пробелов одним пробелом, за исключением того, что я также хочу, чтобы пропали один или несколько пробелов в начале строки.
Нечто подобное заставляет меня там отчасти
String mytext = " hello there ";
mytext = mytext.replaceAll("( )+", " ");
но не совсем.
Ответы:
Попробуй это:
Смотрите также
String.trim()
Нет
trim()
регулярных выраженийЭто также возможно сделать только с одним
replaceAll
, но это гораздо менее читабельно, чемtrim()
решение. Тем не менее, здесь приведено только для того, чтобы показать, что может сделать регулярное выражение:Есть 3 варианта:
^_+
: любая последовательность пробелов в начале строки$1
, который захватывает пустую строку_+$
: любая последовательность пробелов в конце строки$1
, который захватывает пустую строку(_)+
: любая последовательность пробелов, которая не соответствует ни одному из вышеперечисленных, то есть она находится в середине$1
, который захватывает один пробелСмотрите также
источник
trim()
а затемreplaceAll()
использовать меньше памяти, чем делать это наоборот. Не очень, но если это вызывается много-много раз, это может сложиться, особенно если есть много «обрезаемых пробелов». (наTrim()
самом деле не избавляется от лишнего пространства - он просто скрывает его, перемещая начальное и конечное значения. Базовое значениеchar[]
остается неизменным.)( ) +
или( ){2,}
должен быть (очень) немного более эффективным;)\\s
заменяет любую группу пробелов на нужный символ..trim().replaceAll(" +", " ")
(с двумя пробелами) быстрее, чем.trim().replaceAll(" +", " ")
(с одним пробелом). Я запускал временные тесты для строк, которые имели только один пробел и все двойные пробелы, и он выполнялся значительно быстрее для обеих операций при выполнении большого количества операций (миллионы или больше, в зависимости от среды).Вам просто нужно:
где вы сопоставляете один или несколько пробелов и заменяете их одним пробелом, а затем обрезаете пробелы в начале и в конце (вы можете фактически инвертировать, сначала обрезав, а затем сопоставив, чтобы сделать регулярное выражение быстрее, как кто-то указал).
Чтобы проверить это быстро, попробуйте:
и он вернется:
источник
Используйте метод Apache Commons
StringUtils.normalizeSpace(String str)
. Смотрите документы здесьисточник
Это отлично сработало для меня:
sValue = sValue.trim().replaceAll("\\s+", " ");
источник
Это будет соответствовать более чем одному пробелу.
ВЫВОД:
источник
Чтобы исключить пробелы в начале и в конце строки, используйте
String#trim()
метод. А потом используй свойmytext.replaceAll("( )+", " ")
.источник
Вы можете сначала использовать
String.trim()
, а затем применить команду regex replace к результату.источник
Следующий код сжимает любые пробелы между словами и удаляет любые в начале и конце строки
Это будет выводить
a string with many spaces, a tab and a newline
Обратите внимание, что любые непечатаемые символы, включая пробелы, символы табуляции и переносы строк, будут сжаты или удалены
Для получения дополнительной информации см. Соответствующую документацию:
источник
Попробуй это.
Образец кода
ВЫВОД
Сначала он заменит все пробелы одним пробелом. Чем мы должны делать обрезку,
String
потому что в началеString
и концеString
она заменит все пробелы одним пробелом, еслиString
есть пробелы в началеString
и конце,String
поэтому нам нужно их обрезать. Чем вы получаете желаемоеString
.источник
Вы могли бы также использовать lookarounds.
ИЛИ
<space>(?= )
соответствует пробелу, за которым следует другой пробел. Таким образом, в последовательных пробелах он будет соответствовать всем пробелам, кроме последнего, потому что за ним не следует пробел. Это оставляет вам один пробел для последовательных пробелов после операции удаления.Пример:
источник
отделка()
Удаляет только начальные и конечные пробелы.
Из Java Doc «Возвращает строку, значением которой является эта строка, с удалением всех начальных и конечных пробелов».
"D ev Dum my"
replace (), replaceAll ()
Заменяет все пустые строки в слове,
Вывод:
Примечание: "\ s +" - это регулярное выражение, похожее на символ пробела.
Ссылка : https://www.codedjava.com/2018/06/replace-all-spaces-in-string-trim.html
источник
До сих пор было дано много правильных ответов, и я вижу много голосов. Тем не менее, упомянутые способы будут работать, но не очень оптимизированы или не очень читабельны. Недавно я наткнулся на решение, которое понравится каждому разработчику.
Вы сделали. Это читабельное решение.
источник
В Котлине это будет выглядеть так
источник
уменьшить пробелы в первую очередь
заглавная буква и строчные все остальное
источник
источник
Это сработало для меня
где фильтр - следующая функция, а сканирование - входная строка:
источник
ты должен сделать это так
поставить + внутри круглых скобок.
источник
источник
См
String.replaceAll
.Используйте регулярное выражение
"\s"
и замените на" "
.Тогда используйте
String.trim
.источник
new String(" hello there ").trim().replaceAll("\\s+", " ")
Проверь это...
Если строка содержит только один пробел, то replace () не будет заменять,
Если пробелов больше, чем один, выполняется действие replace (), которое удаляет процедуру.
Подсчитать количество пробелов в строке.
Pattern .quote ("?") Возвращает буквенный шаблон String.
источник
Мой метод, прежде чем я нашел второй ответ, используя регулярное выражение в качестве лучшего решения. Может быть, кому-то нужен этот код.
источник
\s
означает регулярные выражения (пробел, табуляция, новая строка, подача формы).Потоковая версия, фильтры пробелов и вкладок.
источник
источник
Самый простой метод для удаления пробелов в любом месте строки.
источник
Приведенное выше решение представляет собой алгоритм со сложностью O (n) без использования какой-либо Java-функции.
источник
Пожалуйста, используйте ниже код
источник
Привет, извините за задержку! Вот лучший и самый эффективный ответ, который вы ищете:
Таким образом, ваш вывод этого примера будет: Меня зовут kingkon.
Однако этот метод также удалит "\ n", который может иметь ваша строка. Так что, если вы не хотите, просто используйте этот простой метод:
И если вы хотите убрать начальные и конечные пробелы, просто добавьте:
источник
Я знаю, что метод replaceAll намного проще, но я также хотел опубликовать это.
источник
источник