2013-09-26 3 views
3

문자열의 첫 번째 대문자를 제외한 각 대문자 앞에 "-"를 어떻게 추가 할 수 있습니까?문자열의 각 대문자 앞에 "-"를 추가하는 방법

나는이 "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" 

내가이 문제에 대해 무엇을 저를 제안 해주십시오합니다 .

감사합니다.

답변

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을 확인할 수 있습니다.

때문에, 정규 표현식에 대한 해결책이 될 수 있습니다 : 코드 아래 시도

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

덕분에 지금 .. – Deepak

+0

@deep 당신을 환영합니다. "Vamshi"솔루션을보고 난 후에 값을 확인하는 대신 Character.isUpperCase로 코드를 약간 변경했습니다. 나는 여전히 전 C 프로그래머이기 때문에 검사를한다. –

+0

@deep 또한 정규 표현식으로 대답을 업데이트했다. –

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

저는 이미 매우 비슷한 코드를 제공했습니다. 또한, 당신은 빈 문자열의 경우를 처리하지 않았고, 새로운 임시 문자열을 만드는 것들을 연결함으로써 ... –

0

을 왜 그냥이 일을하지 않는

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