Java 在大写字母后插入空格
如何将Java 在大写字母后插入空格,java,string,Java,String,如何将“HelloWorld”转换为“Hello World”。拆分必须基于大写字母进行,但应排除第一个字母 p.S:我知道使用String.split然后组合。只是想知道是否有更好的方法 这个正则表达式搜索一个小写字母,后跟一个大写字母,并用前者、空格和后者替换它们(有效地用空格分隔它们)。为了能够通过反向引用重用替换字符串中的值($1和$2) 为了查找大写和小写字母,它使用\p{Ll}和\p{Lu}(而不是[a-z]和[a-z]),因为它处理Unicode标准中的所有大写和小写字母,而不仅仅
“HelloWorld”
转换为“Hello World”
。拆分必须基于大写字母进行,但应排除第一个字母
p.S:我知道使用String.split然后组合。只是想知道是否有更好的方法
这个正则表达式搜索一个小写字母,后跟一个大写字母,并用前者、空格和后者替换它们(有效地用空格分隔它们)。为了能够通过反向引用重用替换字符串中的值($1
和$2
)
为了查找大写和小写字母,它使用
\p{Ll}
和\p{Lu}
(而不是[a-z]
和[a-z]
),因为它处理Unicode标准中的所有大写和小写字母,而不仅仅是ASCII范围中的字母(大部分也适用于Java).如果不想使用正则表达式,可以循环字符串中的字符,将它们添加到stringbuilder(如果遇到大写字母不是第一个,则向字符串生成器添加空格):
String s=“HelloWorld”;
StringBuilder结果=新建StringBuilder();
对于(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;
}
更好是主观的。这需要更多的代码行:
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();
}
public静态字符串decamelcasenalize(字符串camelCasedString){
if(camelCasedString==null | | camelCasedString.isEmpty())
返回CAMELDSTRING;
StringBuilder结果=新建StringBuilder();
结果.append(camelCasedString.charAt(0));
对于(int i=1;i
将这个丑陋的实现隐藏在实用程序类中,并将其用作API(从用户的角度来看,看起来还行;)
印刷品
你好,世界尼桑
作为评论而不是回答发布,因为我不知道语法。但是我相信写一个正则表达式会很容易找到大写字母(不是在句子的开头)并在它前面加一个空格。你希望转换(“HELLO”)吗?@vz0:实际上我的字符串在大写字母之间会有一些小写字母。我知道这个方法,正如我在p.s.中提到的。@Emil-你说过你知道使用字符串拆分然后组合,这个方法不会使用拆分一次,也不会模拟它的行为+1这是一个很好的实现,但我更喜欢正则表达式。我只需要转换几个字符串。
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();
}
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);