Apache Commons StringUtils.capitalize() 或 Commons Text WordUtils.capitalize()
例如:WordUtils.capitalize("i am FINE") = "I Am FINE"
,来自WordUtils文档。
StringUtils.capitalise()
。 - OrangeDogcapitalize()
方法吗? - TylerHJava的String类中没有capitalize()或titleCase()方法。你有两个选择:
StringUtils.capitalize(null) = null
StringUtils.capitalize("") = ""
StringUtils.capitalize("cat") = "Cat"
StringUtils.capitalize("cAt") = "CAt"
StringUtils.capitalize("'cat'") = "'cat'"
public static String toTitleCase(String input) {
StringBuilder titleCase = new StringBuilder(input.length());
boolean nextTitleCase = true;
for (char c : input.toCharArray()) {
if (Character.isSpaceChar(c)) {
nextTitleCase = true;
} else if (nextTitleCase) {
c = Character.toTitleCase(c);
nextTitleCase = false;
}
titleCase.append(c);
}
return titleCase.toString();
}
System.out.println(toTitleCase("string"));
System.out.println(toTitleCase("another string"));
System.out.println(toTitleCase("YET ANOTHER STRING"));
输出:
字符串 另一个字符串 仍然是一个字符串
StringBuilder
中使用的内部 char[]
调整大小,建议使用 new StringBuilder(input.length())
。 - Lino如果我可以提交我的解决方案...
下面的方法基于dfa发布的方法。它进行了以下重大改变(适用于我当时需要的解决方案):除非紧接着一个“可操作分隔符”,否则它将输入字符串中的所有字符都强制转换为小写,否则该字符将被强制转换为大写。
我的例行程序的一个主要局限性是它假设“首字母大写”在所有语言环境中都有统一定义,并且使用了与我所用相同的大小写约定,因此在这方面它比dfa的代码不那么有用。
public static String toDisplayCase(String s) {
final String ACTIONABLE_DELIMITERS = " '-/"; // these cause the character following
// to be capitalized
StringBuilder sb = new StringBuilder();
boolean capNext = true;
for (char c : s.toCharArray()) {
c = (capNext)
? Character.toUpperCase(c)
: Character.toLowerCase(c);
sb.append(c);
capNext = (ACTIONABLE_DELIMITERS.indexOf((int) c) >= 0); // explicit cast not needed
}
return sb.toString();
}
测试值
a string
maRTin o'maLLEY
john wilkes-booth
YET ANOTHER STRING
输出
A String
Martin O'Malley
John Wilkes-Booth
Yet Another String
Character.toTitleCase
。 - mihi使用来自Apache Commons的WordUtils.capitalizeFully()。
WordUtils.capitalizeFully(null) = null
WordUtils.capitalizeFully("") = ""
WordUtils.capitalizeFully("i am FINE") = "I Am Fine"
您可以像这样使用 Apache Commons Lang:
WordUtils.capitalizeFully("this is a text to be capitalize")
您可以在此处找到Java文档: WordUtils.capitalizeFully Java文档
如果您想要移除单词之间的空格,您可以使用:
StringUtils.remove(WordUtils.capitalizeFully("this is a text to be capitalize")," ")
你可以在StringUtils.remove的Java文档中找到关于字符串操作的信息。
希望这可以帮到你。
以下是基于 @dfa 和 @scottb 的回答并处理任何非字母/数字字符的另一种方法:
public final class TitleCase {
public static String toTitleCase(String input) {
StringBuilder titleCase = new StringBuilder(input.length());
boolean nextTitleCase = true;
for (char c : input.toLowerCase().toCharArray()) {
if (!Character.isLetterOrDigit(c)) {
nextTitleCase = true;
} else if (nextTitleCase) {
c = Character.toTitleCase(c);
nextTitleCase = false;
}
titleCase.append(c);
}
return titleCase.toString();
}
}
输出为:MARY ÄNN O’CONNEŽ-ŠUSLIK
Mary Änn O’Connež-Šuslik
我写了一个将snake_case转换为lowerCamelCase的程序,但可以根据要求轻松进行调整
private String convertToLowerCamel(String startingText)
{
String[] parts = startingText.split("_");
return parts[0].toLowerCase() + Arrays.stream(parts)
.skip(1)
.map(part -> part.substring(0, 1).toUpperCase() + part.substring(1).toLowerCase())
.collect(Collectors.joining());
}
static String toTitleCase(String word) {
return Stream.of(word.split(" "))
.map(w -> w.toUpperCase().charAt(0) + w.toLowerCase().substring(1))
.reduce((s, s2) -> s + " " + s2)
.orElse("");
}
使用Spring的StringUtils
:
org.springframework.util.StringUtils.capitalize(someText);
如果您已经使用Spring框架,那么这个方法可以避免引入另一个框架。