2014-02-27 138 views
2

我需要写用户在其中输入对象的字符串,如“HelloIamYourNeighbor” 并返回“你好,我是你的邻居”程序插入空白

到目前为止,我已经能够将大写字母转换为大写字母,但我无法在大写字母之间插入空格。

for (int i = 0; i < input.length(); i++) { 
    if (input.contains("(?=\\p{Lu})")) { 
     str.append(" "); 
    } 
    if (Character.isUpperCase(input.charAt(i)) && i != 0) { 
     str.setCharAt(i, Character.toLowerCase(input.charAt(i))); 
} 
} 
System.out.println(str);  
+0

这可能是帮助http://stackoverflow.com/questions/4886091/insert-space-after-capital-letter?rq=1 –

回答

3

我这样做:

StringBuilder sb = new StringBuilder(); 
for(int i=0; i<string.length(); i++) { 
    char c = string.charAt(c); 
    if(Character.isUpperCase(c)){ 
     sb.append(' '); 
    } 
    sb.append(c); 
} 
String newString = sb.toString(); 
+0

string.charAt()参数应该是我,而不是c。 – mcw

1

假设 “海峡”,是一个StringBuilder或StringBuffer的,你要删除的 “input.contains” 检查和str.append那里。你也想改变str.setCharAt以下几点:

if (Character.isUpperCase(input.charAt(i)) && i != 0) { 
    str.append(' '); // adds a space 
    str.append(Character.toLowerCase(input.charAt(i)); // add lowercase. 
} else { // Not an upper case, so just append it normally. 
    // EDIT: Added (char) cast to get the right overload of append. 
    str.append((char)input.charAt(i)); 
} 

基本上,这是什么说的是“如果它的大写字母,添加一个空格,然后在较低的情况下的值,否则只是追加原样。”

+0

当我尝试使用“Hello World”的建议时,我得到的字符位置就像这样的结果“HelloWorldHello 5orld” –

+0

啊,是的,我认为你需要将input.charAt(i)转换为(char)。 – Daniel

1

一行代码:

string.replaceAll("([A-Z])", " $1"); 

() - 这是捕获组,它匹配大写字母 它取代这场比赛有空格和查询匹配的信。