4

文字列の最初の大文字とは別に、文字列の各大文字の前に「-」を追加するにはどうすればよいですか。

この「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

4 に答える 4

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

いずれにせよ、正規表現のテストについては、このウェブサイトをチェックしてください。

したがって、正規表現の場合、解決策は次のようになります。

return input.charAt(0)+input.substring(1).replaceAll("(\\p{Lu})","-$1");
于 2013-09-26T09:40:28.730 に答える
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());  
于 2013-09-26T09:54:48.837 に答える
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();
    }
于 2013-09-26T10:32:38.467 に答える