Java用の汎用toCamelCase()関数

今日、私はラクダケースの任意のコンテンツの文字列を翻訳する必要がありました。

インターネットでは、定数名のみ(Java規約、SOME_JAVA_NAMING_CONVENTION_CONSTによる)を変換するか、スペースで区切られたフレーズのみを変換するほとんどの専門的な方法が見つかります。

私は断固として十分を持っていなかった、私はより多くの汎用性が必要でした。



自尊心のあるサイクリストにふさわしいので、アルゴリズムを書き始め、少し夢中になりました。 コードから目覚めた後、関数がすべてのフィード行を通常のcamelCaseまたはCamelCaseに変換することがわかりました。

それがしない唯一のことは、結果の行の先頭にある数字を禁止しないことです(JNC規則の場合)。しかし、私はそれを必要としません(必要な場合、1行のコードで追加されます-2番目の埋め込み条件への補充)。



カットの下で何が起こったかを見ることができます。





この関数は、2つの引数を取ります。実際の文字列と、大文字(アンダーキャメルケース)で結果を書き込むように指示するフラグです。

彼女はすべてを一度に行います。 コードには、初心者向けのコメント(この虎の巻が書かれている)が散りばめられています。

残念なことに、2番目の議論は痛みを伴わずに食い止めることができます。

また、実質的に変更なしで、アルゴリズムはjavascriptおよびC#に移植されます。



/** *     camelCase ( CamelCase) . * * @param string   * @param firstWordToLowerCase        (lowercase). */ public static String toCamelCase(String string, boolean firstWordToLowerCase) { char currentChar, previousChar = '\u0000'; //      StringBuilder result = new StringBuilder(); //       boolean firstLetterArrived = !firstWordToLowerCase; // ,        lowercase boolean nextLetterInUpperCase = true; // ,       UPPERCASE //       for (int i = 0; i < string.length(); i++) { currentChar = string.charAt(i); /*      -      (  )     .        ,      -      (  ). */ if (!Character.isLetterOrDigit(currentChar) || ( ((Character.isLetter(previousChar) && Character.isLowerCase(previousChar)) || Character.isDigit(previousChar)) && Character.isLetter(currentChar) && Character.isUpperCase(currentChar)) ) { nextLetterInUpperCase = true; if (!Character.isLetterOrDigit(currentChar)) { previousChar = currentChar; continue; } } //     ,     . if (nextLetterInUpperCase && firstLetterArrived) { result.append(Character.toUpperCase(currentChar)); } else { result.append(Character.toLowerCase(currentChar)); } //  . firstLetterArrived = true; nextLetterInUpperCase = false; previousChar = currentChar; } //   . return result.toString(); }
      
      







さて、関数の結果の例
ソース文字列: 'normalCamelCaseName'

結果文字列: 'normalCamelCaseName'

結果の文字列: 'NormalCamelCaseName'(firstWordToLowerCase = false)

=============================

ソース文字列: 'NotCamelCaseName'

結果文字列: 'notCamelCaseName'

結果文字列: 'NotCamelCaseName'(firstWordToLowerCase = false)

=============================

ソース文字列: 'CONSTANT_TO_CAMEL_CASE'

結果文字列: 'constantToCamelCase'

結果文字列: 'ConstantToCamelCase'(firstWordToLowerCase = false)

=============================

ソース文字列:「キャメルケースへのテキスト」

結果文字列: 'textToCamelCase'

結果文字列: 'TextToCamelCase'(firstWordToLowerCase = false)

=============================

ソース文字列:「ラクダケースへのテキスト」

結果文字列: 'textToCamelCase'

結果文字列: 'TextToCamelCase'(firstWordToLowerCase = false)

=============================

ソース文字列:「私たちはSHIFFT、DRUZYAFFKIに向かっている!:)」

結果文字列:「私たちは私たちのシフテッドルゼンツァフキを包みます」

結果の文字列:「OURSHIFFTEDRUSENZAFFKIでの切り替え」(firstWordToLowerCase = false)

=============================

ソース文字列: '-(*&*&%&%$ ^&^ *()Characters *&^%*(Punctuation&$ ... and unreadable ----------- characters ^(Maybe * 90Be&(*?*?:どのように**%?:%何でも!」

結果の文字列:「charactersConfirmationUnreadableSignsMay90Beどれくらいが適切か」

結果の文字列:「罰の兆候、判読不能な兆候、5月90日はどれくらい適切か」(firstWordToLowerCase = false)

=============================

ソース文字列:「そして最後に、句読点付きのロシア文字列(ローカライズ!)」

結果文字列: 'そして最後に、ロシア語の文字列、ローカリゼーションの兆候'

結果文字列: 'INLastRussianStringLanguageStringLocalization'(firstWordToLowerCase = false)






All Articles