如何隐蔽"HelloWorld"
到"Hello World"
.The分裂具有基于大写字母发生,但应排除的第一个字母。插入空格后大写字母
P.S:我知道使用String.split然后合并。只是想知道是否有更好的方法。
如何隐蔽"HelloWorld"
到"Hello World"
.The分裂具有基于大写字母发生,但应排除的第一个字母。插入空格后大写字母
P.S:我知道使用String.split然后合并。只是想知道是否有更好的方法。
String output = input.replaceAll("(\\p{Ll})(\\p{Lu})","$1 $2");
由大写字母follwed小写字母此正则表达式搜索和同前,一个空间,而后者(有效用空格分隔它们)替换它们。它在为了能够在经由反向引用($1
和$2
)替换字符串来重新使用的值使它们中的每一个捕获组()
。
要找到大写和小写字母,它使用\p{Ll}
和\p{Lu}
(而不是[a-z]
和[A-Z]
),因为它处理Unicode标准中的所有大写和小写字母,而不仅仅是在ASCII范围内的那些(this nice explanation of Unicode in regexes大多数也适用于Java)。
+1确实聪明的解决方案! – Nishant 2011-02-03 13:08:50
如果你不想使用正则表达式,你可以通过字符串中的字符循环,把它们添加到一个StringBuilder(并添加一个空格字符串生成器,如果你遇到一个大写字母,这不是第一个) :
String s = "HelloWorld";
StringBuilder result = new StringBuilder();
for(int i=0 ; i<s.length() ; i++) {
char c = s.charAt(i);
if(i!=0&&Character.isUpperCase(c)) {
result.append(' ');
}
result.append(c);
}
伪代码:
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;
}
更好是主观的。这需要一些代码多行:
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("[A-Z]");
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
作为评论发布而不是回答,因为我不知道 句法。但我敢肯定,这将是很容易写的正则表达式会寻找一个大写字母(是不是在句子的开头)和前添加一个空格。 – DaveJohnston 2011-02-03 12:27:09
您是否期望`convert(“HELLO”)==“H E L L O”`? – vz0 2011-02-03 12:27:18
@ vz0:其实我的字符串在大写字母之间会有一些小写字母。 – Emil 2011-02-03 12:29:39