如何大写string中每个单词的第一个字符
Java中内置了一个函数,用于将每个单词的第一个字符转换为string,而不影响其他字符?
例子:
-
jon skeet
– >Jon Skeet
-
miles o'Brien
– >Miles O'Brien
(B保持资本,这就排除了Title Case) -
old mcdonald
– >Old Mcdonald
*
*( Old McDonald
也可以find,但我不认为它是那么聪明)
快速浏览一下Java String Documentation,只会揭示toUpperCase()
和toLowerCase()
,这当然不能提供所需的行为。 当然,谷歌的结果主要是由这两个function。 这似乎是一个必须已经被发明的轮子,所以问以后我可以使用它也没有什么不好的。
WordUtils.capitalize(str)
(来自apache commons-lang )
(注意:如果你需要"fOO BAr"
变成"Foo Bar"
,那么改用capitalizeFully(..)
代替)
如果你只是担心第一个字母大写的第一个字母:
private String capitalize(final String line) { return Character.toUpperCase(line.charAt(0)) + line.substring(1); }
以下方法将所有字母转换为大写/小写,这取决于它们在空间或其他特殊字符附近的位置。
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); }
试试这个非常简单的方法
例如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(); }
输出将是:公羊是好孩子
我写了一个小类来大写string中的所有单词。
可选的multiple delimiters
,每个multiple delimiters
都有自己的行为(大写之前,之后,或两者,以处理像O'Brian
);
可选Locale
;
不要打破Surrogate Pairs
。
现场演示
输出:
==================================== SIMPLE USAGE ==================================== Source: cApItAlIzE this string after WHITE SPACES Output: Capitalize This String After White Spaces ==================================== SINGLE CUSTOM-DELIMITER USAGE ==================================== Source: capitalize this string ONLY before'and''after'''APEX Output: 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 À
注意:第一个字母将总是大写(如果不需要,请编辑源代码)。
请分享您的意见,并帮助我发现错误或改善代码…
码:
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; } }
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();
使用org.apache.commons.lang.StringUtils
使其非常简单。
capitalizeStr = StringUtils.capitalize(str);
使用Split方法将您的string拆分为单词,然后使用内置的string函数来对每个单词进行大写,然后将其附加在一起。
伪码(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
最后string看起来像“你想要应用句柄的句子”
如果您需要大写标题,这可能是有用的。 它将由" "
分隔的每个子string大写,除了诸如"a"
或"the"
类的指定string。 我还没跑,因为晚了,应该没问题。 在一个点上使用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 }
有了这个简单的代码 :
String example="hello"; example=example.substring(0,1).toUpperCase()+example.substring(1, example.length()); System.out.println(example);
结果:你好
即时通讯使用这个function,我认为是更快的性能。
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(); }
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()); }
这是一个简单的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(); }
有很多如何转换大写的第一个字的第一个字母。 我有个主意。 这很简单:
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++; /*to i = i + 1 because we don't need to add value whitespace into string l */ } } return l; }
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); } }
如果我不晚到这里,我的回答是:
String text = "jon skeet, miles o'brien, old mcdonald"; Pattern pattern = Pattern.compile("\\b([az])([\\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);
这只是另一种方式:
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); }
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 ""; } }
}
我不知道如何使用这个SO答案框,但这里是我的解决scheme。 我今晚遇到这个问题,决定去search它。 我find了Neelam Singh的答案,几乎在那里,所以我决定解决这个问题(打破空string),并导致系统崩溃。
您正在查找的方法在下面被命名为capString(String s)。 它变成“这里只有早上5点”变成“这里只有早上5点”。
代码很好评论,所以享受。 干杯!
包com.lincolnwdaniel.interactivestory.model;
公共类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 [ig "" 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(); }
}
我在Java 8中提出了一个更可读的解决scheme。
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(" ")); }
这个解决scheme的要点可以在这里find。 https://gist.github.com/Hylke1982/166a792313c5e2df9d31
我决定增加一个解决scheme来在string中大写单词:
- 单词在这里被定义为相邻的字母或数字字符;
- 代理对也被提供;
- 代码已针对性能进行了优化; 和
- 它仍然是紧凑的。
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(); }
示例调用:
System.out.println(capitalize("An à la carte StRiNg. Surrogate pairs: 𐐪𐐪."));
结果:
An À La Carte String. Surrogate Pairs: 𐐂𐐪.
你是说标题大小写吗?
对于那些在MVC中使用Velocity的人,可以使用StringUtils类中的capitalizeFirstLetter()
方法。
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);
简而精的方法如下:
String name = "test"; name = (name.length() != 0) ?name.toString().toLowerCase().substring(0,1).toUpperCase().concat(name.substring(1)): name;
-------------------- Output -------------------- Test T empty --------------------
如果尝试将名称值更改为三个值,则不会出现错误
这一个工作为姓名案件..与不同types的分隔符,并保持相同的sepator牛仔弗雷德里克 – >让 – 弗雷德里克牛仔弗雷德里克 – >让弗雷德里克
代码与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(); }
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); } } }
如果你喜欢番石榴…
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); } }));
尝试这个
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(); }
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(); }