小さなJavaパズルを紹介します。
これは、開発プロセスにおいて私と同僚の前で生じた実際のタスクであり、完全に正当化されたアプリケーションを持っています。
したがって、条件:
任意の文字列単語を大文字にするタスクを1つのJava式(もちろん、標準ライブラリのみを使用して)に実装する必要があります。
つまり、次のようなものです。
String strOrig = " ";
String strRes = <.. - ..>;
assert strRes.equals(" ");
パズルに対する私たちの解決策は非常に興味深いことが判明したため、コミュニティにこの問題を解決する独自の方法を提供する機会を提供することにしました。
あなたの仮定を待っています!
猫の下での脳活動の結果
alex14n氏と
Daymz氏は、問題の条件を完全に満たす匿名クラスを使用したソリューションを提案しました。
String strRes = (new Object() {
public String work(String string) {
/* */
}
}).work(strOrig);
さて、
trg氏は(私たちと同様の)美しい解決策を提案しました。
彼より少し前に、ブラズコウィッツというニックネームを持つ男がアシャにぶつかり、同じ方法を提案しました。
String strRes = String.format(strOrig.replaceAll("\\b(\\S)", "%S"), (Object[]) strOrig.replaceAll("\\b(\\S)\\S*", "$1").split("\\s+"));
リップルのみを使用する別のソリューションが
Daymzによって提案され
ました :
String strRes = (" " + strOrig)
.replaceAll(
"\\s\\S+",
"$0 " + strOrig
.replaceAll("\\s", "")
.replaceAll("\\\\", "\\\\\\\\")
.replaceAll("\\$", "\\\\\\$")
.toUpperCase()
)
.replaceAll("(?i)(\\s)(\\S)(\\S*) \\S*(\\2)(\\S*)", "$1$4$3")
.substring(1);
ご関心をお寄せいただきありがとうございます!