[解決済み] JavaでCamelCaseを人間が読める名前に変換するにはどうしたらいいですか?
2022-04-23 15:04:40
質問
CamelCaseを人間が読める名前に変換するメソッドを書きたいのですが、どうすればいいですか?
これがテストケースです。
public void testSplitCamelCase() {
assertEquals("lowercase", splitCamelCase("lowercase"));
assertEquals("Class", splitCamelCase("Class"));
assertEquals("My Class", splitCamelCase("MyClass"));
assertEquals("HTML", splitCamelCase("HTML"));
assertEquals("PDF Loader", splitCamelCase("PDFLoader"));
assertEquals("A String", splitCamelCase("AString"));
assertEquals("Simple XML Parser", splitCamelCase("SimpleXMLParser"));
assertEquals("GL 11 Version", splitCamelCase("GL11Version"));
}
解決方法は?
これは、あなたのテストケースで動作します。
static String splitCamelCase(String s) {
return s.replaceAll(
String.format("%s|%s|%s",
"(?<=[A-Z])(?=[A-Z][a-z])",
"(?<=[^A-Z])(?=[A-Z])",
"(?<=[A-Za-z])(?=[^A-Za-z])"
),
" "
);
}
これがテストハーネスです。
String[] tests = {
"lowercase", // [lowercase]
"Class", // [Class]
"MyClass", // [My Class]
"HTML", // [HTML]
"PDFLoader", // [PDF Loader]
"AString", // [A String]
"SimpleXMLParser", // [Simple XML Parser]
"GL11Version", // [GL 11 Version]
"99Bottles", // [99 Bottles]
"May5", // [May 5]
"BFG9000", // [BFG 9000]
};
for (String test : tests) {
System.out.println("[" + splitCamelCase(test) + "]");
}
ゼロ長マッチング正規表現で、lookbehindとlookforwardを使って、スペースを挿入する場所を探しています。基本的に3つのパターンがあり、私はそのうちの1つである
String.format
を使い、読みやすいようにまとめています。
という3つのパターンがあります。
後ろのUC、UCに続いて前のLC
XMLParser AString PDFLoader
/\ /\ /\
後ろが非UC、前がUC
MyClass 99Bottles
/\ /\
後ろに文字、前に非文字
GL11 May5 BFG9000
/\ /\ /\
参考文献
関連する質問
ゼロ長マッチングのルックアラウンドを使用して分割する。
関連
-
Dateが型に解決できない問題を解決する
-
Javaクラスローダーにソースコードから潜り込む
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列を整数に変換する方法は?
-
[解決済み] Javaで文字列を分割する方法
-
[解決済み] Javaでバイトサイズを人間が読める形式に変換するにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
myeclipseでコンパイルするとAntエラーが発生する javaの例外が発生しました。
-
final, finally, finalizeの違いについて話してください。
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
プロローグでのコンテンツは禁止されています
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
eclipse の実行時に java 仮想マシンが見つからなかった
-
[解決済み] 正規表現全体を否定するには?
-
[解決済み】文字列を分割しても、区切り文字を維持する方法は?
-
[解決済み] PascalCaseをsnake_caseに変換するには?