Java, как заменить 2 или больше пробелов одиночным пробелом в строке и удалить продвижение и конечные пробелы

Использование slicing

Пример:

nums = [1, 2, 3, 4, 5, 6, 7, 8]
nums = [str(i) for i in nums]
print( ";".join(",".join(nums[i:i+2]) for i in range(0, len(nums), 2)) )

Выход:

1,2;3,4;5,6;7,8
247
задан ajb 3 September 2017 в 19:00
поделиться

7 ответов

Много корректных ответов, обеспеченный до сих пор и я вижу партию upvotes. Однако упомянутые пути будут работать, но не действительно оптимизированные или не действительно читаемые. Я недавно столкнулся с решением, которое будет любить каждый разработчик.

String nameWithProperSpacing = StringUtils.normalizeSpace( stringWithLotOfSpaces );

Вы сделаны. Это - читаемое решение.

2
ответ дан 23 November 2019 в 03:00
поделиться

В Kotlin это было бы похоже на это

val input = "\n\n\n  a     string with     many    spaces,    \n"
val cleanedInput = input.trim().replace(Regex("(\\s)+"), " ")
2
ответ дан 23 November 2019 в 03:00
поделиться

Строковый Токенизатор может использоваться

 String str = "  hello    there  ";
            StringTokenizer stknzr = new StringTokenizer(str, " ");
            StringBuffer sb = new StringBuffer();
            while(stknzr.hasMoreElements())
            {
                sb.append(stknzr.nextElement()).append(" ");
            }
            System.out.println(sb.toString().trim());
0
ответ дан 23 November 2019 в 03:00
поделиться

Попробуйте следующее:

String after = before.trim().replaceAll(" +", " ");

См. Также


Нет trim () regex

Это также можно сделать с помощью всего одного replaceAll , но это гораздо менее читабельно чем решение trim () . Тем не менее, он представлен здесь только для того, чтобы показать, что может делать регулярное выражение:

    String[] tests = {
        "  x  ",          // [x]
        "  1   2   3  ",  // [1 2 3]
        "",               // []
        "   ",            // []
    };
    for (String test : tests) {
        System.out.format("[%s]%n",
            test.replaceAll("^ +| +$|( )+", "$1")
        );
    }

Есть 3 альтернативы:

  • ^ _ + : любая последовательность пробелов в начале строки
    • Сопоставьте и замените на $ 1 , который захватывает пустую строку
  • _ + $ : любая последовательность пробелов в конце строки
    • Сопоставьте и замените на $ 1 , который захватывает пустую строку
  • (_) + : любая последовательность пробелов, которая не соответствует ни одному из вышеперечисленных, то есть посередине.
    • Сопоставьте и замените на $ 1 , который захватывает один пробел

См. Также

424
ответ дан 23 November 2019 в 03:00
поделиться

See String.replaceAll.

Используйте regex "\s" и замените на " ".

Затем используйте String.trim.

0
ответ дан 23 November 2019 в 03:00
поделиться

Чтобы убрать пробелы в начале и в конце строки, используйте метод String#trim(). А затем используйте ваш mytext.replaceAll("( )+", " ").

13
ответ дан 23 November 2019 в 03:00
поделиться

Сначала можно использовать String.trim(), а затем применить к результату команду regex replace.

12
ответ дан 23 November 2019 в 03:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: