Is there a function built into Java that capitalizes the first character of each word in a String, and does not affect the others?
Java中是否有一个函数,将字符串中每个单词的第一个字符大写,而不影响其他字符?
Examples:
例子:
-
jon skeet
->Jon Skeet
- jon skeet -> jon skeet
-
miles o'Brien
->Miles O'Brien
(B remains capital, this rules out Title Case) - miles o'Brien——> miles o'Brien (B仍然是大写,这排除了标题案例)
-
old mcdonald
->Old Mcdonald
* - 老麦当劳->老麦当劳*
*(Old McDonald
would be find too, but I don't expect it to be THAT smart.)
(老麦当劳也会被发现,但我不认为它有那么聪明。)
A quick look at the Java String Documentation reveals only toUpperCase()
and toLowerCase()
, which of course do not provide the desired behavior. Naturally, Google results are dominated by those two functions. It seems like a wheel that must have been invented already, so it couldn't hurt to ask so I can use it in the future.
快速查看Java字符串文档,只会发现toUpperCase()和toLowerCase(),这当然不会提供所需的行为。自然,谷歌结果由这两个函数决定。它看起来就像一个*,肯定已经被发明了,所以问一下也无妨,这样我以后就可以用它了。
42 个解决方案
#1
634
WordUtils.capitalize(str)
(from apache commons-text)
从apache commons-text WordUtils.capitalize(str)()
(Note: if you need "fOO BAr"
to become "Foo Bar"
, then use capitalizeFully(..)
instead)
(注意:如果您需要“fOO BAr”成为“fOO BAr”,那么使用capitalizful(..)代替)
#2
216
If you're only worried about the first letter of the first word being capitalized:
如果你只担心第一个单词的第一个字母被大写:
private String capitalize(final String line) { return Character.toUpperCase(line.charAt(0)) + line.substring(1);}
#3
58
The following method converts all the letters into upper/lower case, depending on their position near a space or other special chars.
下面的方法将所有字母转换为大写/小写,这取决于它们在空格附近的位置或其他特殊字符。
public static String capitalizeString(String string) { char[] chars = string.toLowerCase().toCharArray(); boolean found = false; for (int i = 0; i < chars.length; i++) { if (!found && Character.isLetter(chars[i])) { chars[i] = Character.toUpperCase(chars[i]); found = true; } else if (Character.isWhitespace(chars[i]) || chars[i]=='.' || chars[i]=='\'') { // You can add other chars here found = false; } } return String.valueOf(chars);}
#4
32
Try this very simple way
试试这个简单的方法
example givenString="ram is good boy"
例子givenString="ram是好孩子"
public static String toTitleCase(String givenString) { String[] arr = givenString.split(" "); StringBuffer sb = new StringBuffer(); for (int i = 0; i < arr.length; i++) { sb.append(Character.toUpperCase(arr[i].charAt(0))) .append(arr[i].substring(1)).append(" "); } return sb.toString().trim();}
Output will be: Ram Is Good Boy
输出将是:Ram是好孩子
#5
16
I've written a small Class to capitalize all the words in a String.
我写了一个小类来大写字符串中的所有单词。
Optional multiple delimiters
, each one with its behavior (capitalize before, after, or both, to handle cases like O'Brian
);
可选的多个分隔符,每个分隔符都具有其行为(大写在前、后或两者,以处理像O'Brian这样的情况);
Optional Locale
;
可选语言环境;
Don't breaks with Surrogate Pairs
.
不要打断代理对。
现场演示
Output:
输出:
==================================== SIMPLE USAGE====================================Source: cApItAlIzE this string after WHITE SPACESOutput: Capitalize This String After White Spaces==================================== SINGLE CUSTOM-DELIMITER USAGE====================================Source: capitalize this string ONLY before'and''after'''APEXOutput: Capitalize this string only beforE'AnD''AfteR'''Apex==================================== MULTIPLE CUSTOM-DELIMITER USAGE====================================Source: capitalize this string AFTER SPACES, BEFORE'APEX, and #AFTER AND BEFORE# NUMBER SIGN (#)Output: Capitalize This String After Spaces, BeforE'apex, And #After And BeforE# Number Sign (#)==================================== SIMPLE USAGE WITH CUSTOM LOCALE====================================Source: Uniforming the first and last vowels (different kind of 'i's) of the Turkish word D[İ]YARBAK[I]R (DİYARBAKIR) Output: Uniforming The First And Last Vowels (different Kind Of 'i's) Of The Turkish Word D[i]yarbak[i]r (diyarbakir) ==================================== SIMPLE USAGE WITH A SURROGATE PAIR ====================================Source: ab ????c de àOutput: Ab ????c De À
Note: first letter will always be capitalized (edit the source if you don't want that).
注意:第一个字母总是大写的(如果你不想编辑源文件)。
Please share your comments and help me to found bugs or to improve the code...
请分享您的评论,并帮助我发现bug或改进代码……
Code:
代码:
import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.Locale;public class WordsCapitalizer { public static String capitalizeEveryWord(String source) { return capitalizeEveryWord(source,null,null); } public static String capitalizeEveryWord(String source, Locale locale) { return capitalizeEveryWord(source,null,locale); } public static String capitalizeEveryWord(String source, List<Delimiter> delimiters, Locale locale) { char[] chars; if (delimiters == null || delimiters.size() == 0) delimiters = getDefaultDelimiters(); // If Locale specified, i18n toLowerCase is executed, to handle specific behaviors (eg. Turkish dotted and dotless 'i') if (locale!=null) chars = source.toLowerCase(locale).toCharArray(); else chars = source.toLowerCase().toCharArray(); // First charachter ALWAYS capitalized, if it is a Letter. if (chars.length>0 && Character.isLetter(chars[0]) && !isSurrogate(chars[0])){ chars[0] = Character.toUpperCase(chars[0]); } for (int i = 0; i < chars.length; i++) { if (!isSurrogate(chars[i]) && !Character.isLetter(chars[i])) { // Current char is not a Letter; gonna check if it is a delimitrer. for (Delimiter delimiter : delimiters){ if (delimiter.getDelimiter()==chars[i]){ // Delimiter found, applying rules... if (delimiter.capitalizeBefore() && i>0 && Character.isLetter(chars[i-1]) && !isSurrogate(chars[i-1])) { // previous character is a Letter and I have to capitalize it chars[i-1] = Character.toUpperCase(chars[i-1]); } if (delimiter.capitalizeAfter() && i<chars.length-1 && Character.isLetter(chars[i+1]) && !isSurrogate(chars[i+1])) { // next character is a Letter and I have to capitalize it chars[i+1] = Character.toUpperCase(chars[i+1]); } break; } } } } return String.valueOf(chars); } private static boolean isSurrogate(char chr){ // Check if the current character is part of an UTF-16 Surrogate Pair. // Note: not validating the pair, just used to bypass (any found part of) it. return (Character.isHighSurrogate(chr) || Character.isLowSurrogate(chr)); } private static List<Delimiter> getDefaultDelimiters(){ // If no delimiter specified, "Capitalize after space" rule is set by default. List<Delimiter> delimiters = new ArrayList<Delimiter>(); delimiters.add(new Delimiter(Behavior.CAPITALIZE_AFTER_MARKER, ' ')); return delimiters; } public static class Delimiter { private Behavior behavior; private char delimiter; public Delimiter(Behavior behavior, char delimiter) { super(); this.behavior = behavior; this.delimiter = delimiter; } public boolean capitalizeBefore(){ return (behavior.equals(Behavior.CAPITALIZE_BEFORE_MARKER) || behavior.equals(Behavior.CAPITALIZE_BEFORE_AND_AFTER_MARKER)); } public boolean capitalizeAfter(){ return (behavior.equals(Behavior.CAPITALIZE_AFTER_MARKER) || behavior.equals(Behavior.CAPITALIZE_BEFORE_AND_AFTER_MARKER)); } public char getDelimiter() { return delimiter; } } public static enum Behavior { CAPITALIZE_AFTER_MARKER(0), CAPITALIZE_BEFORE_MARKER(1), CAPITALIZE_BEFORE_AND_AFTER_MARKER(2); private int value; private Behavior(int value) { this.value = value; } public int getValue() { return value; } }
#6
14
String toBeCapped = "i want this sentence capitalized";String[] tokens = toBeCapped.split("\\s");toBeCapped = "";for(int i = 0; i < tokens.length; i++){ char capLetter = Character.toUpperCase(tokens[i].charAt(0)); toBeCapped += " " + capLetter + tokens[i].substring(1);}toBeCapped = toBeCapped.trim();
#7
9
Using org.apache.commons.lang.StringUtils
makes it very simple.
使用org.apache.common .lang. stringutils使其非常简单。
capitalizeStr = StringUtils.capitalize(str);
#8
5
I made a solution in Java 8 that is IMHO more readable.
我用Java 8编写了一个更易于阅读的解决方案。
public String firstLetterCapitalWithSingleSpace(final String words) { return Stream.of(words.trim().split("\\s")) .filter(word -> word.length() > 0) .map(word -> word.substring(0, 1).toUpperCase() + word.substring(1)) .collect(Collectors.joining(" "));}
The Gist for this solution can be found here: https://gist.github.com/Hylke1982/166a792313c5e2df9d31
该解决方案的要点如下:https://gist.github.com/Hylke1982/166a792313c5e2df9d31
#9
5
I'm using the following function. I think it is faster in performance.
我用的是下面的函数。我认为它在性能上更快。
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();}
#10
4
Use the Split method to split your string into words, then use the built in string functions to capitalize each word, then append together.
使用Split方法将字符串分割成单词,然后使用内置的string函数对每个单词进行大写,然后一起追加。
Pseudo-code (ish)
伪代码(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
In the end string looks something like"The Sentence You Want To Apply Caps To"
最后的字符串看起来像是"你想要应用大写字母的句子"
#11
4
This might be useful if you need to capitalize titles. It capitalizes each substring delimited by " "
, except for specified strings such as "a"
or "the"
. I haven't ran it yet because it's late, should be fine though. Uses Apache Commons StringUtils.join()
at one point. You can substitute it with a simple loop if you wish.
如果你需要大写标题,这可能是有用的。除指定的字符串如“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}
#12
3
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());}
#13
3
Here is a simple function
这是一个简单的函数
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();}
#14
3
With this simple code:
这个简单的代码:
String example="hello";example=example.substring(0,1).toUpperCase()+example.substring(1, example.length());System.out.println(example);
Result: Hello
结果:你好
#15
3
I decided to add one more solution for capitalizing words in a string:
我决定再添加一个字符串大写的解决方案:
- words are defined here as adjacent letter-or-digit characters;
- 这里的词定义为相邻的字母或数字字符;
- surrogate pairs are provided as well;
- 还提供代理对;
- the code has been optimized for performance; and
- 代码已经为性能优化了;和
- it is still compact.
- 它仍然是紧凑。
Function:
功能:
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();}
Example call:
示例调用:
System.out.println(capitalize("An à la carte StRiNg. Surrogate pairs: ????????."));
Result:
结果:
An À La Carte String. Surrogate Pairs: ????????.
#16
3
There are many way to convert the first letter of the first word being capitalized. I have an idea. It's very simple:
有很多方法可以将第一个词的首字母大写化。我有个主意。这是非常简单的:
public String capitalize(String str){ /* The first thing we do is remove whitespace from string */ String c = str.replaceAll("\\s+", " "); String s = c.trim(); String l = ""; for(int i = 0; i < s.length(); i++){ if(i == 0){ /* Uppercase the first letter in strings */ l += s.toUpperCase().charAt(i); i++; /* To i = i + 1 because we don't need to add value i = 0 into string l */ } l += s.charAt(i); if(s.charAt(i) == 32){ /* If we meet whitespace (32 in ASCII Code is whitespace) */ l += s.toUpperCase().charAt(i+1); /* Uppercase the letter after whitespace */ i++; /* Yo i = i + 1 because we don't need to add value whitespace into string l */ } } return l;}
#17
2
package com.test; /** * @author Prasanth Pillai * @date 01-Feb-2012 * @description : Below is the test class details * * inputs a String from a user. Expect the String to contain spaces and alphanumeric characters only. * capitalizes all first letters of the words in the given String. * preserves all other characters (including spaces) in the String. * displays the result to the user. * * Approach : I have followed a simple approach. However there are many string utilities available * for the same purpose. Example : WordUtils.capitalize(str) (from apache commons-lang) * */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Test {public static void main(String[] args) throws IOException{ System.out.println("Input String :\n"); InputStreamReader converter = new InputStreamReader(System.in); BufferedReader in = new BufferedReader(converter); String inputString = in.readLine(); int length = inputString.length(); StringBuffer newStr = new StringBuffer(0); int i = 0; int k = 0; /* This is a simple approach * step 1: scan through the input string * step 2: capitalize the first letter of each word in string * The integer k, is used as a value to determine whether the * letter is the first letter in each word in the string. */ while( i < length){ if (Character.isLetter(inputString.charAt(i))){ if ( k == 0){ newStr = newStr.append(Character.toUpperCase(inputString.charAt(i))); k = 2; }//this else loop is to avoid repeatation of the first letter in output string else { newStr = newStr.append(inputString.charAt(i)); } } // for the letters which are not first letter, simply append to the output string. else { newStr = newStr.append(inputString.charAt(i)); k=0; } i+=1; } System.out.println("new String ->"+newStr); }}
#18
2
Use:
使用:
String text = "jon skeet, miles o'brien, old mcdonald"; Pattern pattern = Pattern.compile("\\b([a-z])([\\w]*)"); Matcher matcher = pattern.matcher(text); StringBuffer buffer = new StringBuffer(); while (matcher.find()) { matcher.appendReplacement(buffer, matcher.group(1).toUpperCase() + matcher.group(2)); } String capitalized = matcher.appendTail(buffer).toString(); System.out.println(capitalized);
#19
2
This is just another way of doing it:
这只是另一种方式:
private String capitalize(String line){ StringTokenizer token =new StringTokenizer(line); String CapLine=""; while(token.hasMoreTokens()) { String tok = token.nextToken().toString(); CapLine += Character.toUpperCase(tok.charAt(0))+ tok.substring(1)+" "; } return CapLine.substring(0,CapLine.length()-1);}
#20
2
Reusable method for intiCap:
intiCap可重用的方法:
public class YarlagaddaSireeshTest{ public static void main(String[] args) { String FinalStringIs = ""; String testNames = "sireesh yarlagadda test"; String[] name = testNames.split("\\s"); for(String nameIs :name){ FinalStringIs += getIntiCapString(nameIs) + ","; } System.out.println("Final Result "+ FinalStringIs); } public static String getIntiCapString(String param) { if(param != null && param.length()>0){ char[] charArray = param.toCharArray(); charArray[0] = Character.toUpperCase(charArray[0]); return new String(charArray); } else { return ""; } }}
#21
2
Here is my solution.
这是我的解决方案。
I ran across this problem tonight and decided to search it. I found an answer by Neelam Singh that was almost there, so I decided to fix the issue (broke on empty strings) and caused a system crash.
今晚我遇到了这个问题,决定去找它。我找到了Neelam Singh的答案,几乎就在那里,所以我决定解决这个问题(打开空字符串),导致系统崩溃。
The method you are looking for is named capString(String s)
below. It turns "It's only 5am here" into "It's Only 5am Here".
您正在寻找的方法名为capString(String s)。它把“It’s only 5am here”变成了“It’s only 5am here”。
The code is pretty well commented, so enjoy.
代码注释得很好,所以请欣赏。
package com.lincolnwdaniel.interactivestory.model; public class StringS { /** * @param s is a string of any length, ideally only one word * @return a capitalized string. * only the first letter of the string is made to uppercase */ public static String capSingleWord(String s) { if(s.isEmpty() || s.length()<2) { return Character.toUpperCase(s.charAt(0))+""; } else { return Character.toUpperCase(s.charAt(0)) + s.substring(1); } } /** * * @param s is a string of any length * @return a title cased string. * All first letter of each word is made to uppercase */ public static String capString(String s) { // Check if the string is empty, if it is, return it immediately if(s.isEmpty()){ return s; } // Split string on space and create array of words String[] arr = s.split(" "); // Create a string buffer to hold the new capitalized string StringBuffer sb = new StringBuffer(); // Check if the array is empty (would be caused by the passage of s as an empty string [i.g "" or " "], // If it is, return the original string immediately if( arr.length < 1 ){ return s; } for (int i = 0; i < arr.length; i++) { sb.append(Character.toUpperCase(arr[i].charAt(0))) .append(arr[i].substring(1)).append(" "); } return sb.toString().trim(); }}
#22
1
For those of you using Velocity in your MVC, you can use the capitalizeFirstLetter()
method from the StringUtils class.
对于在MVC中使用Velocity的用户,可以使用StringUtils类中的capitalizeFirstLetter()方法。
#23
1
String s="hi dude i want apple"; s = s.replaceAll("\\s+"," "); String[] split = s.split(" "); s=""; for (int i = 0; i < split.length; i++) { split[i]=Character.toUpperCase(split[i].charAt(0))+split[i].substring(1); s+=split[i]+" "; System.out.println(split[i]); } System.out.println(s);
#24
1
package corejava.string.intern;import java.io.DataInputStream;import java.util.ArrayList;/* * wap to accept only 3 sentences and convert first character of each word into upper case */public class Accept3Lines_FirstCharUppercase { static String line; static String words[]; static ArrayList<String> list=new ArrayList<String>(); /** * @param args */ public static void main(String[] args) throws java.lang.Exception{ DataInputStream read=new DataInputStream(System.in); System.out.println("Enter only three sentences"); int i=0; while((line=read.readLine())!=null){ method(line); //main logic of the code if((i++)==2){ break; } } display(); System.out.println("\n End of the program"); } /* * this will display all the elements in an array */ public static void display(){ for(String display:list){ System.out.println(display); } } /* * this divide the line of string into words * and first char of the each word is converted to upper case * and to an array list */ public static void method(String lineParam){ words=line.split("\\s"); for(String s:words){ String result=s.substring(0,1).toUpperCase()+s.substring(1); list.add(result); } }}
#25
1
If you prefer Guava...
如果你喜欢番石榴……
String myString = ...;String capWords = Joiner.on(' ').join(Iterables.transform(Splitter.on(' ').omitEmptyStrings().split(myString), new Function<String, String>() { public String apply(String input) { return Character.toUpperCase(input.charAt(0)) + input.substring(1); }}));
#26
1
String toUpperCaseFirstLetterOnly(String str) { String[] words = str.split(" "); StringBuilder ret = new StringBuilder(); for(int i = 0; i < words.length; i++) { ret.append(Character.toUpperCase(words[i].charAt(0))); ret.append(words[i].substring(1)); if(i < words.length - 1) { ret.append(' '); } } return ret.toString();}
#27
1
The short and precise way is as follows:
简单而精确的方法如下:
String name = "test";name = (name.length() != 0) ?name.toString().toLowerCase().substring(0,1).toUpperCase().concat(name.substring(1)): name;
--------------------Output--------------------TestT empty--------------------
It works without error if you try and change the name value to the three of values. Error free.
如果您尝试将名称值更改为三个值,那么它就不会出错。无错。
#28
1
This one works for the surname case...
这个适用于姓的情况……
With different types of separators, and it keeps the same separator:
使用不同类型的分离器,保持相同的分离器:
-
jean-frederic --> Jean-Frederic
jean-frederic - - > jean-frederic
-
jean frederic --> Jean Frederic
jean frederic
The code works with the GWT client side.
代码与GWT客户端一起工作。
public static String capitalize (String givenString) { String Separateur = " ,.-;"; StringBuffer sb = new StringBuffer(); boolean ToCap = true; for (int i = 0; i < givenString.length(); i++) { if (ToCap) sb.append(Character.toUpperCase(givenString.charAt(i))); else sb.append(Character.toLowerCase(givenString.charAt(i))); if (Separateur.indexOf(givenString.charAt(i)) >=0) ToCap = true; else ToCap = false; } return sb.toString().trim();}
#29
1
Try this:
试试这个:
private String capitalizer(String word){ String[] words = word.split(" "); StringBuilder sb = new StringBuilder(); if (words[0].length() > 0) { sb.append(Character.toUpperCase(words[0].charAt(0)) + words[0].subSequence(1, words[0].length()).toString().toLowerCase()); for (int i = 1; i < words.length; i++) { sb.append(" "); sb.append(Character.toUpperCase(words[i].charAt(0)) + words[i].subSequence(1, words[i].length()).toString().toLowerCase()); } } return sb.toString(); }
#30
1
From Java 9+
you can use String::replceAll
like this :
可以使用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);}
Example :
例子:
upperCaseAllFirstCharacter("hello this is Just a test");
Outputs
输出
Hello This Is Just A Test
#1
634
WordUtils.capitalize(str)
(from apache commons-text)
从apache commons-text WordUtils.capitalize(str)()
(Note: if you need "fOO BAr"
to become "Foo Bar"
, then use capitalizeFully(..)
instead)
(注意:如果您需要“fOO BAr”成为“fOO BAr”,那么使用capitalizful(..)代替)
#2
216
If you're only worried about the first letter of the first word being capitalized:
如果你只担心第一个单词的第一个字母被大写:
private String capitalize(final String line) { return Character.toUpperCase(line.charAt(0)) + line.substring(1);}
#3
58
The following method converts all the letters into upper/lower case, depending on their position near a space or other special chars.
下面的方法将所有字母转换为大写/小写,这取决于它们在空格附近的位置或其他特殊字符。
public static String capitalizeString(String string) { char[] chars = string.toLowerCase().toCharArray(); boolean found = false; for (int i = 0; i < chars.length; i++) { if (!found && Character.isLetter(chars[i])) { chars[i] = Character.toUpperCase(chars[i]); found = true; } else if (Character.isWhitespace(chars[i]) || chars[i]=='.' || chars[i]=='\'') { // You can add other chars here found = false; } } return String.valueOf(chars);}
#4
32
Try this very simple way
试试这个简单的方法
example givenString="ram is good boy"
例子givenString="ram是好孩子"
public static String toTitleCase(String givenString) { String[] arr = givenString.split(" "); StringBuffer sb = new StringBuffer(); for (int i = 0; i < arr.length; i++) { sb.append(Character.toUpperCase(arr[i].charAt(0))) .append(arr[i].substring(1)).append(" "); } return sb.toString().trim();}
Output will be: Ram Is Good Boy
输出将是:Ram是好孩子
#5
16
I've written a small Class to capitalize all the words in a String.
我写了一个小类来大写字符串中的所有单词。
Optional multiple delimiters
, each one with its behavior (capitalize before, after, or both, to handle cases like O'Brian
);
可选的多个分隔符,每个分隔符都具有其行为(大写在前、后或两者,以处理像O'Brian这样的情况);
Optional Locale
;
可选语言环境;
Don't breaks with Surrogate Pairs
.
不要打断代理对。
现场演示
Output:
输出:
==================================== SIMPLE USAGE====================================Source: cApItAlIzE this string after WHITE SPACESOutput: Capitalize This String After White Spaces==================================== SINGLE CUSTOM-DELIMITER USAGE====================================Source: capitalize this string ONLY before'and''after'''APEXOutput: Capitalize this string only beforE'AnD''AfteR'''Apex==================================== MULTIPLE CUSTOM-DELIMITER USAGE====================================Source: capitalize this string AFTER SPACES, BEFORE'APEX, and #AFTER AND BEFORE# NUMBER SIGN (#)Output: Capitalize This String After Spaces, BeforE'apex, And #After And BeforE# Number Sign (#)==================================== SIMPLE USAGE WITH CUSTOM LOCALE====================================Source: Uniforming the first and last vowels (different kind of 'i's) of the Turkish word D[İ]YARBAK[I]R (DİYARBAKIR) Output: Uniforming The First And Last Vowels (different Kind Of 'i's) Of The Turkish Word D[i]yarbak[i]r (diyarbakir) ==================================== SIMPLE USAGE WITH A SURROGATE PAIR ====================================Source: ab ????c de àOutput: Ab ????c De À
Note: first letter will always be capitalized (edit the source if you don't want that).
注意:第一个字母总是大写的(如果你不想编辑源文件)。
Please share your comments and help me to found bugs or to improve the code...
请分享您的评论,并帮助我发现bug或改进代码……
Code:
代码:
import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.Locale;public class WordsCapitalizer { public static String capitalizeEveryWord(String source) { return capitalizeEveryWord(source,null,null); } public static String capitalizeEveryWord(String source, Locale locale) { return capitalizeEveryWord(source,null,locale); } public static String capitalizeEveryWord(String source, List<Delimiter> delimiters, Locale locale) { char[] chars; if (delimiters == null || delimiters.size() == 0) delimiters = getDefaultDelimiters(); // If Locale specified, i18n toLowerCase is executed, to handle specific behaviors (eg. Turkish dotted and dotless 'i') if (locale!=null) chars = source.toLowerCase(locale).toCharArray(); else chars = source.toLowerCase().toCharArray(); // First charachter ALWAYS capitalized, if it is a Letter. if (chars.length>0 && Character.isLetter(chars[0]) && !isSurrogate(chars[0])){ chars[0] = Character.toUpperCase(chars[0]); } for (int i = 0; i < chars.length; i++) { if (!isSurrogate(chars[i]) && !Character.isLetter(chars[i])) { // Current char is not a Letter; gonna check if it is a delimitrer. for (Delimiter delimiter : delimiters){ if (delimiter.getDelimiter()==chars[i]){ // Delimiter found, applying rules... if (delimiter.capitalizeBefore() && i>0 && Character.isLetter(chars[i-1]) && !isSurrogate(chars[i-1])) { // previous character is a Letter and I have to capitalize it chars[i-1] = Character.toUpperCase(chars[i-1]); } if (delimiter.capitalizeAfter() && i<chars.length-1 && Character.isLetter(chars[i+1]) && !isSurrogate(chars[i+1])) { // next character is a Letter and I have to capitalize it chars[i+1] = Character.toUpperCase(chars[i+1]); } break; } } } } return String.valueOf(chars); } private static boolean isSurrogate(char chr){ // Check if the current character is part of an UTF-16 Surrogate Pair. // Note: not validating the pair, just used to bypass (any found part of) it. return (Character.isHighSurrogate(chr) || Character.isLowSurrogate(chr)); } private static List<Delimiter> getDefaultDelimiters(){ // If no delimiter specified, "Capitalize after space" rule is set by default. List<Delimiter> delimiters = new ArrayList<Delimiter>(); delimiters.add(new Delimiter(Behavior.CAPITALIZE_AFTER_MARKER, ' ')); return delimiters; } public static class Delimiter { private Behavior behavior; private char delimiter; public Delimiter(Behavior behavior, char delimiter) { super(); this.behavior = behavior; this.delimiter = delimiter; } public boolean capitalizeBefore(){ return (behavior.equals(Behavior.CAPITALIZE_BEFORE_MARKER) || behavior.equals(Behavior.CAPITALIZE_BEFORE_AND_AFTER_MARKER)); } public boolean capitalizeAfter(){ return (behavior.equals(Behavior.CAPITALIZE_AFTER_MARKER) || behavior.equals(Behavior.CAPITALIZE_BEFORE_AND_AFTER_MARKER)); } public char getDelimiter() { return delimiter; } } public static enum Behavior { CAPITALIZE_AFTER_MARKER(0), CAPITALIZE_BEFORE_MARKER(1), CAPITALIZE_BEFORE_AND_AFTER_MARKER(2); private int value; private Behavior(int value) { this.value = value; } public int getValue() { return value; } }
#6
14
String toBeCapped = "i want this sentence capitalized";String[] tokens = toBeCapped.split("\\s");toBeCapped = "";for(int i = 0; i < tokens.length; i++){ char capLetter = Character.toUpperCase(tokens[i].charAt(0)); toBeCapped += " " + capLetter + tokens[i].substring(1);}toBeCapped = toBeCapped.trim();
#7
9
Using org.apache.commons.lang.StringUtils
makes it very simple.
使用org.apache.common .lang. stringutils使其非常简单。
capitalizeStr = StringUtils.capitalize(str);
#8
5
I made a solution in Java 8 that is IMHO more readable.
我用Java 8编写了一个更易于阅读的解决方案。
public String firstLetterCapitalWithSingleSpace(final String words) { return Stream.of(words.trim().split("\\s")) .filter(word -> word.length() > 0) .map(word -> word.substring(0, 1).toUpperCase() + word.substring(1)) .collect(Collectors.joining(" "));}
The Gist for this solution can be found here: https://gist.github.com/Hylke1982/166a792313c5e2df9d31
该解决方案的要点如下:https://gist.github.com/Hylke1982/166a792313c5e2df9d31
#9
5
I'm using the following function. I think it is faster in performance.
我用的是下面的函数。我认为它在性能上更快。
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();}
#10
4
Use the Split method to split your string into words, then use the built in string functions to capitalize each word, then append together.
使用Split方法将字符串分割成单词,然后使用内置的string函数对每个单词进行大写,然后一起追加。
Pseudo-code (ish)
伪代码(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
In the end string looks something like"The Sentence You Want To Apply Caps To"
最后的字符串看起来像是"你想要应用大写字母的句子"
#11
4
This might be useful if you need to capitalize titles. It capitalizes each substring delimited by " "
, except for specified strings such as "a"
or "the"
. I haven't ran it yet because it's late, should be fine though. Uses Apache Commons StringUtils.join()
at one point. You can substitute it with a simple loop if you wish.
如果你需要大写标题,这可能是有用的。除指定的字符串如“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}
#12
3
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());}
#13
3
Here is a simple function
这是一个简单的函数
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();}
#14
3
With this simple code:
这个简单的代码:
String example="hello";example=example.substring(0,1).toUpperCase()+example.substring(1, example.length());System.out.println(example);
Result: Hello
结果:你好
#15
3
I decided to add one more solution for capitalizing words in a string:
我决定再添加一个字符串大写的解决方案:
- words are defined here as adjacent letter-or-digit characters;
- 这里的词定义为相邻的字母或数字字符;
- surrogate pairs are provided as well;
- 还提供代理对;
- the code has been optimized for performance; and
- 代码已经为性能优化了;和
- it is still compact.
- 它仍然是紧凑。
Function:
功能:
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();}
Example call:
示例调用:
System.out.println(capitalize("An à la carte StRiNg. Surrogate pairs: ????????."));
Result:
结果:
An À La Carte String. Surrogate Pairs: ????????.
#16
3
There are many way to convert the first letter of the first word being capitalized. I have an idea. It's very simple:
有很多方法可以将第一个词的首字母大写化。我有个主意。这是非常简单的:
public String capitalize(String str){ /* The first thing we do is remove whitespace from string */ String c = str.replaceAll("\\s+", " "); String s = c.trim(); String l = ""; for(int i = 0; i < s.length(); i++){ if(i == 0){ /* Uppercase the first letter in strings */ l += s.toUpperCase().charAt(i); i++; /* To i = i + 1 because we don't need to add value i = 0 into string l */ } l += s.charAt(i); if(s.charAt(i) == 32){ /* If we meet whitespace (32 in ASCII Code is whitespace) */ l += s.toUpperCase().charAt(i+1); /* Uppercase the letter after whitespace */ i++; /* Yo i = i + 1 because we don't need to add value whitespace into string l */ } } return l;}
#17
2
package com.test; /** * @author Prasanth Pillai * @date 01-Feb-2012 * @description : Below is the test class details * * inputs a String from a user. Expect the String to contain spaces and alphanumeric characters only. * capitalizes all first letters of the words in the given String. * preserves all other characters (including spaces) in the String. * displays the result to the user. * * Approach : I have followed a simple approach. However there are many string utilities available * for the same purpose. Example : WordUtils.capitalize(str) (from apache commons-lang) * */ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Test {public static void main(String[] args) throws IOException{ System.out.println("Input String :\n"); InputStreamReader converter = new InputStreamReader(System.in); BufferedReader in = new BufferedReader(converter); String inputString = in.readLine(); int length = inputString.length(); StringBuffer newStr = new StringBuffer(0); int i = 0; int k = 0; /* This is a simple approach * step 1: scan through the input string * step 2: capitalize the first letter of each word in string * The integer k, is used as a value to determine whether the * letter is the first letter in each word in the string. */ while( i < length){ if (Character.isLetter(inputString.charAt(i))){ if ( k == 0){ newStr = newStr.append(Character.toUpperCase(inputString.charAt(i))); k = 2; }//this else loop is to avoid repeatation of the first letter in output string else { newStr = newStr.append(inputString.charAt(i)); } } // for the letters which are not first letter, simply append to the output string. else { newStr = newStr.append(inputString.charAt(i)); k=0; } i+=1; } System.out.println("new String ->"+newStr); }}
#18
2
Use:
使用:
String text = "jon skeet, miles o'brien, old mcdonald"; Pattern pattern = Pattern.compile("\\b([a-z])([\\w]*)"); Matcher matcher = pattern.matcher(text); StringBuffer buffer = new StringBuffer(); while (matcher.find()) { matcher.appendReplacement(buffer, matcher.group(1).toUpperCase() + matcher.group(2)); } String capitalized = matcher.appendTail(buffer).toString(); System.out.println(capitalized);
#19
2
This is just another way of doing it:
这只是另一种方式:
private String capitalize(String line){ StringTokenizer token =new StringTokenizer(line); String CapLine=""; while(token.hasMoreTokens()) { String tok = token.nextToken().toString(); CapLine += Character.toUpperCase(tok.charAt(0))+ tok.substring(1)+" "; } return CapLine.substring(0,CapLine.length()-1);}
#20
2
Reusable method for intiCap:
intiCap可重用的方法:
public class YarlagaddaSireeshTest{ public static void main(String[] args) { String FinalStringIs = ""; String testNames = "sireesh yarlagadda test"; String[] name = testNames.split("\\s"); for(String nameIs :name){ FinalStringIs += getIntiCapString(nameIs) + ","; } System.out.println("Final Result "+ FinalStringIs); } public static String getIntiCapString(String param) { if(param != null && param.length()>0){ char[] charArray = param.toCharArray(); charArray[0] = Character.toUpperCase(charArray[0]); return new String(charArray); } else { return ""; } }}
#21
2
Here is my solution.
这是我的解决方案。
I ran across this problem tonight and decided to search it. I found an answer by Neelam Singh that was almost there, so I decided to fix the issue (broke on empty strings) and caused a system crash.
今晚我遇到了这个问题,决定去找它。我找到了Neelam Singh的答案,几乎就在那里,所以我决定解决这个问题(打开空字符串),导致系统崩溃。
The method you are looking for is named capString(String s)
below. It turns "It's only 5am here" into "It's Only 5am Here".
您正在寻找的方法名为capString(String s)。它把“It’s only 5am here”变成了“It’s only 5am here”。
The code is pretty well commented, so enjoy.
代码注释得很好,所以请欣赏。
package com.lincolnwdaniel.interactivestory.model; public class StringS { /** * @param s is a string of any length, ideally only one word * @return a capitalized string. * only the first letter of the string is made to uppercase */ public static String capSingleWord(String s) { if(s.isEmpty() || s.length()<2) { return Character.toUpperCase(s.charAt(0))+""; } else { return Character.toUpperCase(s.charAt(0)) + s.substring(1); } } /** * * @param s is a string of any length * @return a title cased string. * All first letter of each word is made to uppercase */ public static String capString(String s) { // Check if the string is empty, if it is, return it immediately if(s.isEmpty()){ return s; } // Split string on space and create array of words String[] arr = s.split(" "); // Create a string buffer to hold the new capitalized string StringBuffer sb = new StringBuffer(); // Check if the array is empty (would be caused by the passage of s as an empty string [i.g "" or " "], // If it is, return the original string immediately if( arr.length < 1 ){ return s; } for (int i = 0; i < arr.length; i++) { sb.append(Character.toUpperCase(arr[i].charAt(0))) .append(arr[i].substring(1)).append(" "); } return sb.toString().trim(); }}
#22
1
For those of you using Velocity in your MVC, you can use the capitalizeFirstLetter()
method from the StringUtils class.
对于在MVC中使用Velocity的用户,可以使用StringUtils类中的capitalizeFirstLetter()方法。
#23
1
String s="hi dude i want apple"; s = s.replaceAll("\\s+"," "); String[] split = s.split(" "); s=""; for (int i = 0; i < split.length; i++) { split[i]=Character.toUpperCase(split[i].charAt(0))+split[i].substring(1); s+=split[i]+" "; System.out.println(split[i]); } System.out.println(s);
#24
1
package corejava.string.intern;import java.io.DataInputStream;import java.util.ArrayList;/* * wap to accept only 3 sentences and convert first character of each word into upper case */public class Accept3Lines_FirstCharUppercase { static String line; static String words[]; static ArrayList<String> list=new ArrayList<String>(); /** * @param args */ public static void main(String[] args) throws java.lang.Exception{ DataInputStream read=new DataInputStream(System.in); System.out.println("Enter only three sentences"); int i=0; while((line=read.readLine())!=null){ method(line); //main logic of the code if((i++)==2){ break; } } display(); System.out.println("\n End of the program"); } /* * this will display all the elements in an array */ public static void display(){ for(String display:list){ System.out.println(display); } } /* * this divide the line of string into words * and first char of the each word is converted to upper case * and to an array list */ public static void method(String lineParam){ words=line.split("\\s"); for(String s:words){ String result=s.substring(0,1).toUpperCase()+s.substring(1); list.add(result); } }}
#25
1
If you prefer Guava...
如果你喜欢番石榴……
String myString = ...;String capWords = Joiner.on(' ').join(Iterables.transform(Splitter.on(' ').omitEmptyStrings().split(myString), new Function<String, String>() { public String apply(String input) { return Character.toUpperCase(input.charAt(0)) + input.substring(1); }}));
#26
1
String toUpperCaseFirstLetterOnly(String str) { String[] words = str.split(" "); StringBuilder ret = new StringBuilder(); for(int i = 0; i < words.length; i++) { ret.append(Character.toUpperCase(words[i].charAt(0))); ret.append(words[i].substring(1)); if(i < words.length - 1) { ret.append(' '); } } return ret.toString();}
#27
1
The short and precise way is as follows:
简单而精确的方法如下:
String name = "test";name = (name.length() != 0) ?name.toString().toLowerCase().substring(0,1).toUpperCase().concat(name.substring(1)): name;
--------------------Output--------------------TestT empty--------------------
It works without error if you try and change the name value to the three of values. Error free.
如果您尝试将名称值更改为三个值,那么它就不会出错。无错。
#28
1
This one works for the surname case...
这个适用于姓的情况……
With different types of separators, and it keeps the same separator:
使用不同类型的分离器,保持相同的分离器:
-
jean-frederic --> Jean-Frederic
jean-frederic - - > jean-frederic
-
jean frederic --> Jean Frederic
jean frederic
The code works with the GWT client side.
代码与GWT客户端一起工作。
public static String capitalize (String givenString) { String Separateur = " ,.-;"; StringBuffer sb = new StringBuffer(); boolean ToCap = true; for (int i = 0; i < givenString.length(); i++) { if (ToCap) sb.append(Character.toUpperCase(givenString.charAt(i))); else sb.append(Character.toLowerCase(givenString.charAt(i))); if (Separateur.indexOf(givenString.charAt(i)) >=0) ToCap = true; else ToCap = false; } return sb.toString().trim();}
#29
1
Try this:
试试这个:
private String capitalizer(String word){ String[] words = word.split(" "); StringBuilder sb = new StringBuilder(); if (words[0].length() > 0) { sb.append(Character.toUpperCase(words[0].charAt(0)) + words[0].subSequence(1, words[0].length()).toString().toLowerCase()); for (int i = 1; i < words.length; i++) { sb.append(" "); sb.append(Character.toUpperCase(words[i].charAt(0)) + words[i].subSequence(1, words[i].length()).toString().toLowerCase()); } } return sb.toString(); }
#30
1
From Java 9+
you can use String::replceAll
like this :
可以使用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);}
Example :
例子:
upperCaseAllFirstCharacter("hello this is Just a test");
Outputs
输出
Hello This Is Just A Test