Лучший способ обрезать пробелы в строке

Смотрите на мой ConcurrentLinkedHashMap ссылки для примера того, как записать структуру данных без блокировок. Это не основано ни на каких научных работах и не требует лет исследования, поскольку другие подразумевают. Это просто берет тщательную разработку.

Моя реализация действительно использует ConcurrentHashMap, который является алгоритмом блокировки на блок, но она не полагается на ту деталь реализации. Это могло легко быть заменено реализацией Щелчка Cliff без блокировок. Я одолжил идею от Cliff, но использовал намного более явно, должен смоделировать все операции CAS с конечным автоматом. Это значительно упрощает модель, поскольку Вы будете видеть, что у меня есть блокировки psuedo через 'состояния луга. Другой прием должен позволить лень и твердость по мере необходимости. Вы будете часто видеть это с отслеживанием в обратном порядке или разрешением другим потокам "помочь" к очистке. В моем случае я решил позволить мертвые узлы в списке быть выселенным, когда они достигают головы, вместо того, чтобы иметь дело со сложностью удаления их с середины списка. Я могу изменить это, но я не сделал совершенно доверительный мой алгоритм отслеживания в обратном порядке и хотел отложить существенное изменение как принятие подхода блокировки с 3 узлами.

книга "Искусство Многопроцессорного Программирования" является большой краткой информацией. В целом, хотя, я рекомендовал бы избежать проектов без блокировок в коде приложения. Часто времена, это - просто излишество, где другой, менее подверженный ошибкам, методы более подходят.

5
задан Alex Gomes 26 November 2009 в 21:48
поделиться

5 ответов

System.out.println("     AA     BB".replaceAll("\\s+", " ").trim());

Output:

AA BB

Note: Unlike some of the other solutions here, this also replaces a single tab with a single space. If you don't have any tabs you can use " {2,}" instead which will be even faster:

System.out.println("     AA     BB".replaceAll(" {2,}", " ").trim());
11
ответ дан 18 December 2019 в 07:55
поделиться
s = s.replaceAll("\\s+", " " ).trim();
2
ответ дан 18 December 2019 в 07:55
поделиться

Здесь есть правильные ответы, например:

s = s.replaceAll("\\s+", " " ).trim();

Но я думаю, что также важно выбрать правильный вопрос. Вместо того чтобы спрашивать об обрезке String с использованием регулярных выражений, почему бы просто не спросить об обрезке String и позволить людям, отвечающим, показать вам лучшую стратегию?

Вполне может быть лучшие способы сворачивать пробелы, чем использовать регулярное выражение. Конечно, есть другие способы.

0
ответ дан 18 December 2019 в 07:55
поделиться

Replace two or more spaces "\\s{2,}" by a single space " " and do a trim() afterwards to get rid of the leading and trailing spaces as you showed in the 1st example.

output = input.replaceAll("\\s{2,}", " ").trim();
7
ответ дан 18 December 2019 в 07:55
поделиться

"Hello a a g g a gag gs gs@".replaceAll( "[ ]+{2}", " ") ).trim();

0
ответ дан 18 December 2019 в 07:55
поделиться
Другие вопросы по тегам:

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