代码之家  ›  专栏  ›  技术社区  ›  emi

在字符串中放置空格

  •  2
  • emi  · 技术社区  · 11 年前

    假设我有一个像“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”向右移动。这就是我试图用我的方法实现的,但看起来我需要一些指导方针。如果有人能帮忙的话。谢谢

    7 回复  |  直到 11 年前
        1
  •  18
  •   Silviu Burcea Abayomi Israel    11 年前

    试试这个:

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

    对于每一个上面的字符,我都会在前面添加一个空格。

    此外,它还适用于多个大写单词。 我得到了 Word1 Word2 Word3 对于 Word1Word2Word3 .

        2
  •  5
  •   Jeroen Vannevel luciomrx    11 年前
    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);
    }
    

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

        3
  •  1
  •   Community miroxlav    7 年前

    这里有类似的问题: Insert Space After Capital letter

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

    参考代码如下:

      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);
    
        4
  •  1
  •   devnull    11 年前

    使用 String.replaceAll :

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

    结果在 Some Long Name .

        5
  •  0
  •   RamonBoza    11 年前

    字符串为 final immutable ,您不能修改它,您将始终使用它来创建一个新的变量并分配给任何变量。

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

        6
  •  0
  •   npinti    11 年前

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

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

    产量: Mike Jackson

        7
  •  0
  •   ferrerverck    11 年前
    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();
    }