package de.axone.tools; public abstract class CamelCase { public static String toCamelCase( String underscored, boolean firstUpperCase ){ if( underscored == null || underscored.length() == 0 ) return underscored; StringBuilder result = new StringBuilder(); boolean makeUpperCase = firstUpperCase; for( char c : underscored.toCharArray() ){ if( c == '_' ){ makeUpperCase = true; } else { if( makeUpperCase ){ c = Character.toUpperCase( c ); } result.append( c ); makeUpperCase = false; } } return result.toString(); } public static String toUnderscored( String camelCase ){ if( camelCase == null || camelCase.length() == 0 ) return camelCase; StringBuilder result = new StringBuilder( camelCase.length() * 2 ); char last = ' '; // not in field names. neither upper nor lower case. not a digit. int len = camelCase.length(); for( int i = 0; i < len; i++ ){ char c = camelCase.charAt( i ); char next; if( i < len-2 ) next = camelCase.charAt( i+1 ); else next = ' '; boolean is_ = false; if( i > 0 ){ if( i < len-2 && Character.isUpperCase( last ) && Character.isUpperCase( c ) && Character.isLowerCase( next ) ) is_ = true; else if( Character.isLowerCase( last ) && Character.isUpperCase( c ) ) is_ = true; else if( Character.isDigit( last ) && ! Character.isDigit( c ) ) is_ = true; else if( (! Character.isDigit( last )) && Character.isDigit( c ) ) is_ = true; } if( is_ ) result.append( '_' ); result.append( Character.toLowerCase( c ) ); last = c; } return result.toString(); } }