将string转换为Title Case

有没有内置的方法可以将string转换为Title Case格式?

Apache Commons StringUtils.capitalize()或WordUtils.capitalize()

例如: WordUtils.capitalize("i am FINE") = "I Am FINE" WordUtils文档

String类中没有大写()或titleCase()方法。 你有两个select:

  • 使用commons lang string utils 。
  • 写(另一个)静态辅助方法toTitleCase()

示例实现

 public static String toTitleCase(String input) { StringBuilder titleCase = new StringBuilder(); 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(); } 

testing用例

  System.out.println(toTitleCase("string")); System.out.println(toTitleCase("another string")); System.out.println(toTitleCase("YET ANOTHER STRING")); 

输出:

串
另一个string
还有一个string

如果我可以提交我的解决scheme…

以下方法基于dfa发布的方法。 它会做出以下主要改变(这适合于我当时需要的解决scheme):它强制inputstring中的所有字符变成小写,除非紧接前面有一个“可操作的分隔符”,在这种情况下,字符被强制转换为大写。

我的日常工作的一个主要局限性是,它假定“标题案例”是为所有地区统一定义的,并且由我所使用的相同的案例约定来表示,所以它比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(); } 

testing值

一个string

玛琳·奥马利

约翰·威尔克斯展位

还有一个string

产出

一个string

马丁·奥马利

约翰·威尔克斯 – 布斯

又一串

使用Apache Commons中的WordUtils.capitalizeFully() 。

 WordUtils.capitalizeFully(null) = null WordUtils.capitalizeFully("") = "" WordUtils.capitalizeFully("i am FINE") = "I Am Fine" 

你可以像这样使用apache的commons langs:

 WordUtils.capitalizeFully("this is a text to be capitalize") 

你可以在这里findjava doc: WordUtils.capitalizeFully java doc

如果你想删除世界之间的空间,你可以使用:

 StringUtils.remove(WordUtils.capitalizeFully("this is a text to be capitalize")," ") 

你可以findString StringUtils.remove java doc的java文档

我希望这个帮助。

如果你想根据最新的Unicode标准来正确的答案,你应该使用icu4j。

 UCharacter.toTitleCase(Locale.US, "hello world", null, 0); 

请注意,这是区域设置敏感。

Api文档

履行

我知道这是一个较老的,但不带有简单的答案,我需要这种方法为我的编码,所以我在这里添加,使用简单。

 public static String toTitleCase(String input) { input = input.toLowerCase(); char c = input.charAt(0); String s = new String("" + c); String f = s.toUpperCase(); return f + input.substring(1); } 

这是我写的将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()); } 

你可以很好的使用

org.apache.commons.lang.WordUtils

要么

CaseFormat

来自Google的API。

下面是另外一个基于@ dfa和@ scottb的答案,可以处理任何非字母/数字字符:

 public final class TitleCase { public static String toTitleCase(String input) { StringBuilder titleCase = new StringBuilder(); 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(); } } 

鉴于input:

玛丽安·奥康涅斯·苏斯里克

输出是

MaryÄnnO'Connež-Šuslik

我最近遇到了这个问题,不幸的是有很多名字以Mc和Mac开头,我最终使用了一个scottb的代码版本,我修改了这些代码来处理这些前缀,以防万一任何人想使用它。

还有边缘情况,这是错过了,但最糟糕的事情可能发生的是,一个字母应该是小写,当它应该是大写。

 /** * Get a nicely formatted representation of the name. * Don't send this the whole name at once, instead send it the components.<br> * For example: andrew macnamara would be returned as:<br> * Andrew Macnamara if processed as a single string<br> * Andrew MacNamara if processed as 2 strings. * @param name * @return correctly formatted name */ public static String getNameTitleCase (String name) { final String ACTIONABLE_DELIMITERS = " '-/"; StringBuilder sb = new StringBuilder(); if (name !=null && !name.isEmpty()){ boolean capitaliseNext = true; for (char c : name.toCharArray()) { c = (capitaliseNext)?Character.toUpperCase(c):Character.toLowerCase(c); sb.append(c); capitaliseNext = (ACTIONABLE_DELIMITERS.indexOf((int) c) >= 0); } name = sb.toString(); if (name.startsWith("Mc") && name.length() > 2 ) { char c = name.charAt(2); if (ACTIONABLE_DELIMITERS.indexOf((int) c) < 0) { sb = new StringBuilder(); sb.append (name.substring(0,2)); sb.append (name.substring(2,3).toUpperCase()); sb.append (name.substring(3)); name=sb.toString(); } } else if (name.startsWith("Mac") && name.length() > 3) { char c = name.charAt(3); if (ACTIONABLE_DELIMITERS.indexOf((int) c) < 0) { sb = new StringBuilder(); sb.append (name.substring(0,3)); sb.append (name.substring(3,4).toUpperCase()); sb.append (name.substring(4)); name=sb.toString(); } } } return name; } 

对不起,我是一个初学者,所以我的编码习惯很烂!

 public class TitleCase { String title(String sent) { sent =sent.trim(); sent = sent.toLowerCase(); String[] str1=new String[sent.length()]; for(int k=0;k<=str1.length-1;k++){ str1[k]=sent.charAt(k)+""; } for(int i=0;i<=sent.length()-1;i++){ if(i==0){ String s= sent.charAt(i)+""; str1[i]=s.toUpperCase(); } if(str1[i].equals(" ")){ String s= sent.charAt(i+1)+""; str1[i+1]=s.toUpperCase(); } System.out.print(str1[i]); } return ""; } public static void main(String[] args) { TitleCase a = new TitleCase(); System.out.println(a.title(" enter your Statement!")); } } 

将任何string转换为标题大小的最简单方法是使用googles包org.apache.commons.lang.WordUtils

 System.out.println(WordUtils.capitalizeFully("tHis will BE MY EXAMple")); 

会导致这一点

这将是我的例子

我不知道为什么它的名字是“capitalizeFully”,其实这个function并没有完成一个完整的资本结果,但无论如何,这就是我们所需要的工具。