Android 如何加上「-&引用;在字符串中的每个大写字母之前

Android 如何加上「-&引用;在字符串中的每个大写字母之前,android,Android,除了字符串的第一个大写字母外,如何在字符串的每个大写字母前添加“-” 我有一个类似“HelloWorldMyNameIsCarl”的字符串,我正在使用这个 "HelloWorldMyNameIsCarl".replaceAll("(.)(\\p{Lu})", "$1-$2") 很好用 解决办法是 "Hello_World_My_Name_Is_Carl" 但对于“THisForNEWTest”来说,它不起作用,解决方案是 "T-His-For-NEw-Test" 但是我想要 "T-His

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

我有一个类似“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"
请建议我如何解决这个问题


谢谢。

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

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();
  }

你为什么不这样做:

replaceAll("(\\p{Lu})", "-$1").replaceAll("^-", "")
请尝试以下代码:

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());  
String test=“THisForNEwTest”;
int size=test.length();
StringBuffer sb=新的StringBuffer();
如果(大小!=0)
sb追加(测试字符(0));
对于(int i=1;i
试试这个:

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();
    }
公共静态字符串函数(String str){
StringBuilder结果=新建StringBuilder();
列表资本=新的ArrayList();
对于(int i=0;i
我已经提供了一个非常类似的代码。此外,您没有处理空字符串的情况,通过连接内容,您可以创建新的临时字符串…@deep欢迎您。在看到“Vamshi”解决方案后,我用Character.isUpperCase而不是检查值对代码进行了一些更改。我做检查是因为我还是一个前C程序员…@deep我还用正则表达式更新了答案。实际上第二个解决方案没有满-你需要检查输入字符串是否为空,如果是,返回“”。节日快乐。
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();
    }