将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并没有完成一个完整的资本结果,但无论如何,这就是我们所需要的工具。