Pull to refresh

Java-головоломка: Капитализация слов в строке за одно java-выражение

Reading time 2 min
Views 5.9K
Представляю вашему вниманию небольшую головоломку по Java.
Это реальная задача, возникшая передо мной и коллегами в процессе разработки и имеет вполне оправданное применение.

Итак, условие:
Необходимо реализовать ОДНИМ выражением Java (конечно же, используя только стандартные библиотеки) задачу по капитализации слов произвольной строки.

То есть, что-то вроде этого:
String strOrig = "строка с большим количеством слов";
String strRes = <.. тут какое-то выражение ..>;
assert strRes.equals("Строка С Большим Количеством Слов");

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

Результаты мозговой деятельности под катом

Мистер alex14n и мистер Daymz предложили решение с использованием анонимных классов, вполне удовлетворяющее условию задачи:
String strRes = (new Object() {
public String work(String string) {
/* а тут много кода */
}
}).work(strOrig);


Ну и красивейшее решение (аналогичное нашему) предложил мистер trg.
Чуть раньше него, в асю стукнул человек с ником Blazkowicz, предложив такой же способ:
String strRes = String.format(strOrig.replaceAll("\\b(\\S)", "%S"), (Object[]) strOrig.replaceAll("\\b(\\S)\\S*", "$1").split("\\s+"));

Еще одно решение с использованием только риплейсов предложил Daymz:
String strRes = (" " + strOrig)
.replaceAll(
"\\s\\S+",
"$0 " + strOrig
.replaceAll("\\s", "")
.replaceAll("\\\\", "\\\\\\\\")
.replaceAll("\\$", "\\\\\\$")
.toUpperCase()
)
.replaceAll("(?i)(\\s)(\\S)(\\S*) \\S*(\\2)(\\S*)", "$1$4$3")
.substring(1);


Спасибо всем за проявленный интерес!
Tags:
Hubs:
+4
Comments 41
Comments Comments 41

Articles