大写字母后插入空格

如何将"HelloWorld""Hello World" 。拆分必须基于大写字母,但应排除第一个字母。

PS :我知道使用String.split然后合并。只想知道是否有更好的方法。

 String output = input.replaceAll("(\\p{Ll})(\\p{Lu})","$1 $2"); 

这个正则表达式搜索一个小写字母,后跟一个大写字母,并用前者,空格和后者替换它们(用空格有效地将它们分开)。 它将它们中的每一个放在一个捕获组()中,以便能够通过反向引用( $1$2 )重用替换字符串中的值。

要查找大写和小写字母,它使用\p{Ll}\p{Lu} (而不是[az][AZ] ),因为它处理Unicode标准中的所有大写和小写字母,而不仅仅是在ASCII范围内(正则表达式中对Unicode的这个很好的解释主要适用于Java)。

更好是主观的。 这需要更多的代码行:

 public static String deCamelCasealize(String camelCasedString) { if (camelCasedString == null || camelCasedString.isEmpty()) return camelCasedString; StringBuilder result = new StringBuilder(); result.append(camelCasedString.charAt(0)); for (int i = 1; i < camelCasedString.length(); i++) { if (Character.isUpperCase(camelCasedString.charAt(i))) result.append(" "); result.append(camelCasedString.charAt(i)); } return result.toString(); } 

在实用程序类中隐藏这个丑陋的实现并将其用作API(从用户角度看是好的;))

  String s = "HelloWorldNishant"; StringBuilder out = new StringBuilder(s); Pattern p = Pattern.compile("[AZ]"); Matcher m = p.matcher(s); int extraFeed = 0; while(m.find()){ if(m.start()!=0){ out = out.insert(m.start()+extraFeed, " "); extraFeed++; } } System.out.println(out); 

版画

Hello World Nishant

如果你不想使用正则表达式,你可以遍历字符串中的字符,将它们添加到stringbuilder中(如果遇到不是第一个的大写字母,则向字符串构建器添加空格):

 String s = "HelloWorld"; StringBuilder result = new StringBuilder(); for(int i=0 ; i 

伪代码:

 String source = ...; String result = ""; // FIXME: check for enf-of-source for each letter in source { while current letter not uppercase { push the letter to result; advance one letter; } if not the first letter { push space to result; } push the letter to result; }