kagamihogeの日記

kagamihogeの日記です。

Javaでキャメルケースとスネークケースの文字列変換

環境

ソースコード

Google Guava

https://github.com/google/guava

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>20.0</version>
</dependency>
String snake = CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, "KagamiHoge");
System.out.println(snake);//kagami_hoge

String camel = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, "kagami_hoge");
System.out.println(camel);//KagamiHoge

Commons Lang

https://commons.apache.org/proper/commons-lang/

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.5</version>
</dependency>
String snake = StringUtils.join(StringUtils.splitByCharacterTypeCamelCase("KagamiHoge"), "_").toLowerCase();
System.out.println(snake);//kagami_hoge

String camel = StringUtils.remove(WordUtils.capitalizeFully("kagami_hoge", '_'), "_");
System.out.println(camel);//KagamiHoge

ModeShape

https://docs.jboss.org/author/display/MODE50/Home

<!-- https://mvnrepository.com/artifact/org.modeshape/modeshape-common -->
<dependency>
    <groupId>org.modeshape</groupId>
    <artifactId>modeshape-common</artifactId>
    <version>5.2.0.Final</version>
</dependency>
Inflector i = Inflector.getInstance();
String snake = i.underscore("KagamiHoge", '_');
System.out.println(snake);//kagami_hoge

String camel = i.upperCamelCase("kagami_hoge");
System.out.println(camel);//KagamiHoge

感想とか

CamelCase と snake_case を相互変換する - Qiita にもあるようにGuavaが手軽。次点でCommons Langか。Commons Langは既にライブラリを入れてる場合も多いんでこれでも良いかな、と個人的には思う。最後に参考URLのstack overflowに乗ってたModeShapeも一応試したけど……あんま見たことないんで、導入済みであれば使ってもいいかな~という感じがする。

参考URL