【问题标题】:Inserting whitespace before capital letter in a string object在字符串对象的大写字母前插入空格
【发布时间】:2014-03-31 15:27:20
【问题描述】:

我需要编写一个程序,用户可以在其中输入一个对象字符串,例如“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);    

【问题讨论】:

标签: java regex string replace


【解决方案1】:

单线:

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

() - 这是捕获组,匹配大写字母 它用空格和这个匹配的字母替换这个匹配。

【讨论】:

    【解决方案2】:

    假设“str”是一个 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)); 
    }
    

    基本上,它的意思是“如果它是大写字母,则附加一个空格,然后是小写值,否则就按原样附加它。”

    【讨论】:

    • 当我用“Hello World”尝试你的建议时,我得到了 char 位置,结果类似于“HelloWorldHello 5orld”
    • 啊,是的,我认为您需要将 input.charAt(i) 转换为 (char)。
    【解决方案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();
    

    【讨论】:

    • string.charAt() 参数应该是 i,而不是 c。
    猜你喜欢
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-10-14
    • 1970-01-01
    相关资源
    最近更新 更多