Представляю вашему вниманию небольшую головоломку по Java.
Это реальная задача, возникшая передо мной и коллегами в процессе разработки и имеет вполне оправданное применение.
Итак, условие:
Необходимо реализовать ОДНИМ выражением Java (конечно же, используя только стандартные библиотеки) задачу по капитализации слов произвольной строки.
То есть, что-то вроде этого:
Наше решение головоломки оказалось очень интересным и я решил предоставить сообществу возможность предложить свои пути решения данной задачи.
Жду ваших предположений!
Результаты мозговой деятельности под катом
Мистер alex14n и мистер Daymz предложили решение с использованием анонимных классов, вполне удовлетворяющее условию задачи:
Ну и красивейшее решение (аналогичное нашему) предложил мистер trg.
Чуть раньше него, в асю стукнул человек с ником Blazkowicz, предложив такой же способ:
Еще одно решение с использованием только риплейсов предложил Daymz:
Спасибо всем за проявленный интерес!
Это реальная задача, возникшая передо мной и коллегами в процессе разработки и имеет вполне оправданное применение.
Итак, условие:
Необходимо реализовать ОДНИМ выражением 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);
Спасибо всем за проявленный интерес!