[java] Java 문자열을 모든 대문자 (밑줄로 분리 된 단어)에서 CamelCase (단어 구분 기호 없음)로 변환하는 가장 간단한 방법은 무엇입니까?

제목은 거의 모든 것을 말합니다. Java "THIS_IS_AN_EXAMPLE_STRING"에서 형식에서 ” ThisIsAnExampleString” 형식 으로 문자열을 변환 할 수있는 가장 단순하고 가장 우아한 방법은 무엇입니까? 나는 String.replaceAll()정규식을 사용하여 적어도 하나의 방법이 있어야한다고 생각합니다 .

내 생각은 다음과 같습니다. 문자열에 밑줄 ( _)을 붙이고 전체 문자열을 소문자로 변환 한 다음 replaceAll을 사용하여 밑줄이 앞에 오는 모든 문자를 대문자 버전으로 변환하십시오.



답변

또 다른 옵션은 Google Guava를 사용하는 것입니다. com.google.common.base.CaseFormat

George Hawkins 는이 사용 예에 ​​대해 설명을 남겼습니다.

CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "THIS_IS_AN_EXAMPLE_STRING");


답변

Apache Commons lang 라이브러리 에서 WordUtils를 살펴보십시오 .

특히 capitalizeFully (String str, char [] delimiters) 메소드는 다음 작업을 수행해야합니다.

String blah = "LORD_OF_THE_RINGS";
assertEquals("LordOfTheRings", WordUtils.capitalizeFully(blah, new char[]{'_'}).replaceAll("_", ""));

그린 바!


답변

static String toCamelCase(String s){
   String[] parts = s.split("_");
   String camelCaseString = "";
   for (String part : parts){
      camelCaseString = camelCaseString + toProperCase(part);
   }
   return camelCaseString;
}

static String toProperCase(String s) {
    return s.substring(0, 1).toUpperCase() +
               s.substring(1).toLowerCase();
}

참고 : 인수 유효성 검사를 추가해야합니다.


답변

Apache Commons Lang3 lib를 사용하면 매우 쉽습니다.

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.text.WordUtils;

public String getName(String text) {
  return StringUtils.remove(WordUtils.capitalizeFully(text, '_'), "_");
}

예:

getName("SOME_CONSTANT");

제공합니다 :

"SomeConstant"


답변

public static void main(String[] args) {
    String start = "THIS_IS_A_TEST";
    StringBuffer sb = new StringBuffer();
    for (String s : start.split("_")) {
        sb.append(Character.toUpperCase(s.charAt(0)));
        if (s.length() > 1) {
            sb.append(s.substring(1, s.length()).toLowerCase());
        }
    }
    System.out.println(sb);
}


답변

다음은 도움이 될 수있는 코드 스 니펫입니다.

String input = "ABC_DEF";
StringBuilder sb = new StringBuilder();
for( String oneString : input.toLowerCase().split("_") )
{
    sb.append( oneString.substring(0,1).toUpperCase() );
    sb.append( oneString.substring(1) );
}

// sb now holds your desired String


답변

스트림을 사용하는 Java 1.8 예

String text = "THIS_IS_SOME_TEXT";

String bactrianCamel = Stream.of(text.split("[^a-zA-Z0-9]"))
        .map(v -> v.substring(0, 1).toUpperCase() + v.substring(1).toLowerCase())
        .collect(Collectors.joining());
String dromedaryCamel = bactrianCamel.toLowerCase().substring(0, 1) + bactrianCamel.substring(1);

System.out.printf("%s is now %s%n", text, dromedaryCamel); 

THIS_IS_SOME_TEXT 는 이제 thisIsSomeText입니다.