如何大写字符串中每个单词的第一个字符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何大写字符串中每个单词的第一个字符相关的知识,希望对你有一定的参考价值。
是否有一个内置于Java中的函数可以将String中每个单词的第一个字符大写,而不影响其他单词?
例子:
jon skeet
- >Jon Skeet
miles o'Brien
- >Miles O'Brien
(B仍然是资本,这排除了标题案例)old mcdonald
- >Old Mcdonald
*
*(Old McDonald
也会被发现,但我不认为它会那么聪明。)
快速浏览一下Java String Documentation只显示toUpperCase()
和toLowerCase()
,这当然不能提供所需的行为。当然,谷歌的结果由这两个功能主导。它看起来像一个必须已经发明的轮子,所以它可以不会受到伤害,所以我可以在将来使用它。
WordUtils.capitalize(str)
(来自apache commons-text)
(注意:如果你需要"fOO BAr"
成为"Foo Bar"
,那么使用capitalizeFully(..)
代替)
我正在使用以下功能。我认为它的性能更快。
public static String capitalize(String text){
String c = (text != null)? text.trim() : "";
String[] words = c.split(" ");
String result = "";
for(String w : words){
result += (w.length() > 1? w.substring(0, 1).toUpperCase(Locale.US) + w.substring(1, w.length()).toLowerCase(Locale.US) : w) + " ";
}
return result.trim();
}
使用Split方法将字符串拆分为单词,然后使用内置字符串函数将每个单词大写,然后一起追加。
伪代码(ish)
string = "the sentence you want to apply caps to";
words = string.split(" ")
string = ""
for(String w: words)
//This line is an easy way to capitalize a word
word = word.toUpperCase().replace(word.substring(1), word.substring(1).toLowerCase())
string += word
最后字符串看起来像“你要申请上限的句子”
如果您需要大写标题,这可能很有用。它将" "
分隔的每个子字符串大写,除了指定的字符串,如"a"
或"the"
。我还没有跑,因为它已经晚了,但应该没问题。在某一点上使用Apache Commons StringUtils.join()
。如果您愿意,可以用简单的循环替换它。
private static String capitalize(String string) {
if (string == null) return null;
String[] wordArray = string.split(" "); // Split string to analyze word by word.
int i = 0;
lowercase:
for (String word : wordArray) {
if (word != wordArray[0]) { // First word always in capital
String [] lowercaseWords = {"a", "an", "as", "and", "although", "at", "because", "but", "by", "for", "in", "nor", "of", "on", "or", "so", "the", "to", "up", "yet"};
for (String word2 : lowercaseWords) {
if (word.equals(word2)) {
wordArray[i] = word;
i++;
continue lowercase;
}
}
}
char[] characterArray = word.toCharArray();
characterArray[0] = Character.toTitleCase(characterArray[0]);
wordArray[i] = new String(characterArray);
i++;
}
return StringUtils.join(wordArray, " "); // Re-join string
}
public static String toTitleCase(String word){
return Character.toUpperCase(word.charAt(0)) + word.substring(1);
}
public static void main(String[] args){
String phrase = "this is to be title cased";
String[] splitPhrase = phrase.split(" ");
String result = "";
for(String word: splitPhrase){
result += toTitleCase(word) + " ";
}
System.out.println(result.trim());
}
From Java 9+
你可以像这样使用String::replceAll
:
public static void upperCaseAllFirstCharacter(String text) {
String regex = "\\b(.)(.*?)\\b";
String result = Pattern.compile(regex).matcher(text).replaceAll(
matche -> matche.group(1).toUpperCase() + matche.group(2)
);
System.out.println(result);
}
示例:
upperCaseAllFirstCharacter("hello this is Just a test");
输出
Hello This Is Just A Test
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter the sentence : ");
try
{
String str = br.readLine();
char[] str1 = new char[str.length()];
for(int i=0; i<str.length(); i++)
{
str1[i] = Character.toLowerCase(str.charAt(i));
}
str1[0] = Character.toUpperCase(str1[0]);
for(int i=0;i<str.length();i++)
{
if(str1[i] == ' ')
{
str1[i+1] = Character.toUpperCase(str1[i+1]);
}
System.out.print(str1[i]);
}
}
catch(Exception e)
{
System.err.println("Error: " + e.getMessage());
}
这是一个简单的功能
public static String capEachWord(String source){
String result = "";
String[] splitString = source.split(" ");
for(String target : splitString){
result += Character.toUpperCase(target.charAt(0))
+ target.substring(1) + " ";
}
return result.trim();
}
我决定再添加一个解决方案来大写字符串中的单词:
- 这里的单词定义为相邻的字母或数字字符;
- 也提供代理对;
- 代码已针对性能进行了优化;和
- 它仍然紧凑。
功能:
public static String capitalize(String string) {
final int sl = string.length();
final StringBuilder sb = new StringBuilder(sl);
boolean lod = false;
for(int s = 0; s < sl; s++) {
final int cp = string.codePointAt(s);
sb.appendCodePoint(lod ? Character.toLowerCase(cp) : Character.toUpperCase(cp));
lod = Character.isLetterOrDigit(cp);
if(!Character.isBmpCodePoint(cp)) s++;
}
return sb.toString();
}
示例电话:
System.out.println(capitalize("An à la carte StRiNg. Surrogate pairs: 以上是关于如何大写字符串中每个单词的第一个字符的主要内容,如果未能解决你的问题,请参考以下文章