2013-07-13 2 views
-3

eyesOfTheTiger 형식의 문자열을 eyes-of-the-tiger으로 변환하는 방법은 무엇입니까?문자열을 다른 문자열 형식으로 변환하는 방법

+2

정말 혼자서 찾아야합니다. String와 Character의 javadoc를 읽습니다. 적어도 가능한 해결책에 대해 생각해 보았습니다. –

+0

문자열 클래스 API 참조 및 하위 문자열 메서드 사용 –

+0

가능한 복제 http://stackoverflow.com/questions/17046827/replace-with-capital-letters – austin

답변

1

"(?<!(^|[A-Z0-9]))(?=[A-Z0-9])|(?<!^)(?=[A-Z][a-z])"과 같은 정규식을 사용하여 split() 문자열을 입력 한 다음 각 분할 끝에 -을 추가 할 수 있습니다.

public String camelCaseToDashSeparated(String initialString) { 
    if(initialString==null || initialString.length()<1) 
     return initialString; 
    StringBuilder str = new StringBuilder(); 
    for (String w : "eyesOfTheTiger".split("(?<!(^|[A-Z0-9]))(?=[A-Z0-9])|(?<!^)(?=[A-Z][a-z])")) { 
     str.append(w.toLowerCase()+"-"); 
    } 
    return str.substring(0, str.length()-1); 
} 

또 다른 방법은 다음과 같습니다 String 통해

여행, char에 의해 char에서, StringBuilder에 문자를 계속 추가. char이 대문자 인 경우 char의 소문자를 사용하여 StringBuilder-을 추가합니다.

public static String camelCaseToDashSeparated2 (String initialString) { 
    StringBuffer buff = new StringBuffer(); 
    for(int x = 0; x < initialString.length(); x++) { 
     char c = initialString.charAt(x); 
     if(Character.isUpperCase(c)) { 
     buff.append("-").append(Character.toLowerCase(c)); 
     } 
     else { 
     buff.append(c); 
     } 
    } 
    return buff.toString(); 
} 
+0

오 마이 갓. 정규 표현식없이 코드를 작성하는 것보다이 정규 표현식이 어떻게 작동하는지 문서화하는 데 더 많은 공간이 필요합니다 (당연히 전체적으로 훨씬 효율적이지 않습니다). –

+0

@JBNizet 물론이 문제를 본 첫 번째 본능이었습니다. – NINCOMPOOP

1

하위 문자열, 정규식 등을 통해 직접이 함수를 구현하기 전에 Google 구아바 사용을 고려해보십시오. Class com.google.common.base.CaseFormat은 의도적으로을 해결합니다.

귀하의 경우에는 LOWER_CAMELLOWER_HYPHEN 클래스 상수와 to(CaseFormat format, String s) 메서드가 필요합니다.

IMO, 모든 것을 직접 구현하는 것보다 성숙하고 잘 테스트 된 라이브러리를 사용하는 것이 좋습니다.

0

신속하고 더러운 솔루션은 다음과 같이 될 수있다 : 그냥 문자열을 통해 여행

public static String toDashed(String value) { 
    if (null == value) 
     return null; 

    StringBuilder sb = new StringBuilder(); 

    for (int i = 0; i < value.length(); ++i) { 
     char ch = value.charAt(i); 

     if ((ch >= 'A') && (ch <= 'Z') && (i > 0)) { 
      sb.append('-'); 
      sb.append(Character.toLowerCase(ch)); 
     } 
     else 
      sb.append(ch); 
    } 

    return sb.toString(); 
} 
3

(영어 등 이외의 공백, 대시, 마침표, 언어로 무엇을 결정해야한다) 문자가 대문자이면 다른 동작을 취하십시오.

public class Test { 
    private static String upperCaseToDash(String input) { 
     StringBuilder sb = new StringBuilder(); 
     for (int i = 0; i < input.length(); i++) { 
      char c = input.charAt(i); 
      if (Character.isUpperCase(c)) 
       sb.append('-').append(Character.toLowerCase(c)); 
      else 
       sb.append(c); 
     } 
     return sb.toString(); 
    } 
    public static void main(String[] args) { 
     System.out.println(upperCaseToDash("eyesOfTheTiger")); 
    } 
} 
+0

정확하게 구현되었습니다. +1. –

관련 문제