Comments 41
интересно, почему так важно было использовать только ОДНУ строку?
str = org.apache.commons.lang.StringUtils.capitalize(str);
str = org.apache.commons.lang.StringUtils.capitalize(str);
String strRes = strOrig.toUpperCase();
или я чего-то не понял?
или я чего-то не понял?
toUpperCase( strOrig.charAt(0) ) + strOrig.substring(1)
String strRes = strOrig.replaceAll("\\b(\\S)", "$1");Осталось толькл придумать, как из этого самого $1 получить строку, чтоб ее toUpperCase:)
Правдо это только для латиницы…
Я тоже так думал
String s = «строка с большим количеством слов»;
String ss = s.replaceAll("(\\s)([а-я])", "$1>$2");
но модификатор > (знак больше) не работает, но суть такая
String s = «строка с большим количеством слов»;
String ss = s.replaceAll("(\\s)([а-я])", "$1>$2");
но модификатор > (знак больше) не работает, но суть такая
strRes = strOrig.replaceAll(
"\\b(\\w)",
"$1:" + strOrig.replaceAll("[^\\w]", "").toUpperCase() +":"
).replaceAll(
"\\b(\\w):.*(\\1).*:",
"$2"
);
Осталось во второй замене отключить соответствие регистра. Сделать это можно через Pattern и Matcher
Интересно, но мне почему-то показалось что под «ОДНИМ выражением» понимается вызовом одного метода один раз.
Попробовал Ваш вариант — что-то не совсем работает…
Можете представить полность доработанный вариант?
PS: В нашем варианте используется не только комбинация replaceAll().
Можете представить полность доработанный вариант?
PS: В нашем варианте используется не только комбинация replaceAll().
inputWord.substring(0,1).toUpperCase() + inputWord.substring(1);
Сорри что лезу в чужой монастырь со своим PHP, но вот решение на нем:
$strRes = mb_ereg_replace("([a-zA-Zа-яА-Я])(\w*.*?)",'mb_strtoupper(\'\\1\')."\\2"',$strOrig,'e');
Думаю, в яве можно сделать аналогичным образом.
$strRes = mb_ereg_replace("([a-zA-Zа-яА-Я])(\w*.*?)",'mb_strtoupper(\'\\1\')."\\2"',$strOrig,'e');
Думаю, в яве можно сделать аналогичным образом.
пока думаю, мысль вслух: за Scala — будущее:
val strRes = strOrig split "\\b" filter {_.length > 0} map {x => x.charAt(0).toUpperCase + x.substring(1)} mkString
В одно выражение:
String strRes = (new java.util.StringTokenizer(strOrig, " ", true) {
public String toString() {
StringBuilder sb = new StringBuilder();
while (hasMoreTokens()) {
String token = nextToken();
sb.append (Character.toUpperCase(token.charAt(0)));
sb.append (token.substring(1));
}
return sb.toString();
}
}).toString();
не могу не согласиться. Это вполне заслуживающее уважения решение.
Но есть другое :)
PS: мы пробовали сделать так в первую очередь, но JasperReport не схвал это — в муках было рождено симпатичное решение без анонимных классов =)
PPS: один товарищ, у которого нету акка на хабре прислал абсолютно верное решение. Предлагаю еще немного подумать!
Но есть другое :)
PS: мы пробовали сделать так в первую очередь, но JasperReport не схвал это — в муках было рождено симпатичное решение без анонимных классов =)
PPS: один товарищ, у которого нету акка на хабре прислал абсолютно верное решение. Предлагаю еще немного подумать!
UFO just landed and posted this here
String strRes = String.format(strOrig.replaceAll("\\b(\\S)", "%S"), (Object[]) strOrig.replaceAll("\\b(\\S)\\S*", "$1").split("\\s"));
Я не силён в java, поэтому вот javascript:
("строка с большим количеством слов").replace(/(^.|\s.)/g, function(_0, _1) { return _1.toUpperCase();})
На пайтоне:
>>> a = «stroka s bolshim kolvom simvolov»
>>> " ".join([word[0].upper()+word[1:] for word in a.split(" ")])
'Stroka S Bolshim Kolvom Simvolov'
Возможно в жабке можно сделать что-то подобное
>>> a = «stroka s bolshim kolvom simvolov»
>>> " ".join([word[0].upper()+word[1:] for word in a.split(" ")])
'Stroka S Bolshim Kolvom Simvolov'
Возможно в жабке можно сделать что-то подобное
А почему так не попробовать?
String strRes = «Строка С Большим Количеством Слов»;
String strRes = «Строка С Большим Количеством Слов»;
Sign up to leave a comment.
Java-головоломка: Капитализация слов в строке за одно java-выражение