如何在字符串中的每个大写字母前添加“ - ”

时间:2013-09-26 09:30:17

标签: android

除了字符串的第一个大写字母外,如何在字符串的每个大写字母前添加“ - ”。

我有一个像这样的字符串“HelloWorldMyNameIsCarl”,我正在使用这个

"HelloWorldMyNameIsCarl".replaceAll("(.)(\\p{Lu})", "$1-$2")

它工作正常。

解决方案

"Hello_World_My_Name_Is_Carl"

但对于“THISForNEWTest”,它不起作用,解决方案是

"T-His-For-NEw-Test" 

但我想要

"T-His-For-N-Ew-Test"

请建议我为这个问题做些什么。

感谢。

4 个答案:

答案 0 :(得分:3)

如果正则表达式存在太复杂的问题,您可以始终使用普通编程。它甚至可能更有效率:

public static String doIt(String input)
  {
  int size=input.length();
  if(size==0)
    return "";
  StringBuilder sb=new StringBuilder(size);
  sb.append(input.charAt(0));
  for(int i=1;i<size;++i)
    {
    char c=input.charAt(i);
    if(Character.isUpperCase(c))
      sb.append('-');
    sb.append(c);
    }
  return sb.toString();
  }

在任何情况下,对于正则表达式测试,您可以查看this website

因此,对于正则表达式,解决方案可以是:

return input.charAt(0)+input.substring(1).replaceAll("(\\p{Lu})","-$1");

答案 1 :(得分:1)

你为什么不这样做:

replaceAll("(\\p{Lu})", "-$1").replaceAll("^-", "")

答案 2 :(得分:0)

尝试以下代码:

String test = "THisForNEwTest";
int size = test.length();
StringBuffer sb = new StringBuffer();
 if(size!=0)
   sb.append(test.charAt(0));

     for (int i = 1; i < size; i++) {
        if(Character.isUpperCase(test.charAt(i))){
            sb.append("-"+test.charAt(i));
        }else{
            sb.append(test.charAt(i));
        }           
        }
System.out.println("result is::::"+sb.toString());  

答案 3 :(得分:0)

试试这个:

public static String function(String str) {
        StringBuilder result = new StringBuilder();
        List<Integer> capital = new ArrayList<Integer>();

        for (int i = 0; i < str.length(); i++)
            if (Character.isUpperCase(str.charAt(i)))
                capital.add(i);

        int capIndex = 0;
        int x = 0;
        for (int y = 0; y < str.length(); y++) {

            if(x < capital.size())
                capIndex = capital.get(x);

            if (y == 0) {
                result.append(str.charAt(y));
                x++;
            } else if(y == capIndex){
                result.append("-" + str.charAt(y));
                x++;
            } else {
                if(str.charAt(y) != ' ')
                    result.append(str.charAt(y));
            }
        }

        return result.toString();
    }