2

假设我有一个像“MikeJackson”这样的字符串,我正试图找出一种在两者之间放置一个空格的方法,这样它就变成了“Mike Jackson”。然后将相同的方法应用于另一个字符串说“JohnBull”会给我返回“John Bull”。这是我想出的代码:

public class Test{

    public Test(){

    }
public void sep(String s){
    s = s + " ";
   char[] charArray = s.toCharArray();
   int l = s.length();
for (int i = 0; i < l; i++){
    char p = ' ';

    if(Character.isUpperCase(s.charAt(0))){
        continue;   
    }
    else if (Character.isUpperCase(s.charAt(i))){
        int k = s.indexOf(s.charAt(i));
        charArray[l] = charArray[--l];
        charArray[k-1] = p;
    }
    //System.out.println(s.charAt(i));
}
}
    public static void main (String args[]){

    Test one = new Test();

    one.sep("MikeJackson");
    }  
}

我的想法是在字符串中添加一个空格,使“MikeJackson”变成“Mike Jackson”,然后将字符移到右侧(检查我在哪里找到大写字母)忽略第一个大写字母。然后用一个字符' '代替字符'J',但将'J'向右移动。这就是我试图用我的方法实现的目标,但看起来我需要一些指导方针。如果有人可以帮忙。谢谢。

4

7 回答 7

18

试试这个:

"MikeJackson".replaceAll("(?!^)([A-Z])", " $1");

对于每个上层字符,我之前都添加了一个空格。

此外,它适用于多个大写单词。我正在Word1 Word2 Word3Word1Word2Word3.

于 2013-10-17T13:33:22.443 回答
5
public static void sep(String s) {
    StringBuilder result = new StringBuilder();
    for (int i = 0; i < s.length(); i++) {

        result.append(s.charAt(i));
        if (i != s.length() -1 && Character.isUpperCase(s.charAt(i + 1))) {
            result.append(" ");
        }
    }
    System.out.println(result);
}

如果下一个字符是大写,只需添加一个空格。

于 2013-10-17T13:31:47.320 回答
1

类似的问题: 在大写字母后插入空格

试试看,如果您有任何问题,请告诉我们!

参考代码在这里:

  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);
于 2013-10-17T13:30:54.743 回答
1

使用String.replaceAll

String foo = "SomeLongName";
System.out.println(foo.replaceAll("([a-z]+)([A-Z])", "$1 $2"));

结果在Some Long Name.

于 2013-10-17T13:35:10.280 回答
0

字符串是finaland immutable,你不能修改它,你总是用它来创建一个新的并分配给任何变量。

话虽如此,我建议寻找第一个非零索引大写,获取它所在的子字符串,存储两个子字符串并在它们之间添加和空格。

于 2013-10-17T13:30:30.730 回答
0

解决这个问题的最简单方法,在这种情况下是使用正则表达式

    String str = "MikeJackson";
    System.out.println(str.replaceAll("(\\w+?)([A-Z])(\\w+?)", "$1 $2$3"));

产量:Mike Jackson

于 2013-10-17T13:33:30.177 回答
0
public static String addSpaces(String str) {
    StringBuilder sb = new StringBuilder();
    if (str.length() == 0) return "";
    sb.append(str.charAt(0));
    for (int i = 1; i < str.length(); i++) {
        if (Character.isUpperCase(str.charAt(i))) sb.append(" ");
        sb.append(str.charAt(i));
    }
    return sb.toString();
}
于 2013-10-17T13:37:05.683 回答