私のコードの6行目のif文のロジックには、たくさんの考えがあります。しかし、私は経験豊かな開発者からのフィードバックを得ることを望んでいました。皆さんは私のコードが複雑すぎると思っていますか?もしそうなら、あなたはこれをより簡潔に書いていますか?個人的に文字列操作に対するクリーナーコードの提案
答えて
を好むでしょうか?はい、あなたは本当に私はずっと簡単に使用されるだろう:-)
です:
public String seeColor (String color) {
if (color.startsWith("red")) return "red";
if (color.startsWith("blue")) return "blue";
return "";
}
次完全なプログラムを行動でそれを示しています
public class Test
{
public static String seeColor (String color) {
if (color.startsWith("red")) return "red";
if (color.startsWith("blue")) return "blue";
return "";
}
public static void main(String[] args) {
String[] testData = { "redxx", "xxred", "blueTimes", "NoColor",
"red", "re", "blu", "blue", "a", "", "xyzred" };
for (String s: testData)
System.out.println("[" + s + "] -> [" + seeColor(s) + "]");
}
}
そのプログラムの存在の出力、予想通り:
[redxx] -> [red]
[xxred] -> []
[blueTimes] -> [blue]
[NoColor] -> []
[red] -> [red]
[re] -> []
[blu] -> []
[blue] -> [blue]
[a] -> []
[] -> []
[xyzred] -> []
あなたが将来的にそれが容易に拡張したい場合は、あなたのようなものを選ぶことができます:
その後public static String seeColor (String color) {
String[] allow = {"red", "blue"};
for (String s: allow)
if (color.startsWith(s))
return s;
return "";
}
、allow
配列に色を追加すると、あなたがそれを認識しているために取る必要がある唯一のステップです。
大きな説明..私はstartsWith()が自然にブール値を返すのを見ましたが、私はあなたがそれから文字列を返すことはできなかったことを認識しませんでしたが、結果に基づいて、私は、各ループのためのコードの最後の部分は、将来の使用のための実用性のための天才だと思う。ありがとう! – user3646508
、私はあなたが
if (str != null) {
if (str.equals("red")) return "red";
else if (str.equals("blue")) return "blue";
}
return "";
または少し複雑switch
if (str != null) {
switch (str) {
case "red":
return "red";
case "blue";
return "blue";
}
}
return "";
テストlength
ようなもので、それを簡素化し、その後にsubstring()
が表示されますを実行するかもしれないと思います比較的高価な多くを実行するString
私に無意味な操作。
編集
あなただけの文字を開始し、テストする必要がある場合は、私は以上に複雑
if (str != null) {
if (str.startsWith("red")) return "red";
else if (str.startsWith("blue")) return "blue";
}
return "";
これは "bluexx"のような入力を考慮していません。 – RogueBaneling
@RogueBaneling OPの2番目の 'if'ブロックは、それを可能性として排除します。私は最初にチェックした。'length'は' 3'でなければならず、 '' red''や '' length''は '' 4''と '' blue'''と等しくなければなりません。 :) –
簡単に枝場合は、新規に追加するのではなく拡張することができるように、ストリームであなたの色の名前をカプセル化したほうが良いだろうと私には思える:
return Stream.of("red", "blue", "green")
.filter(colourName::startsWith).findAny().orElse("");
注このソリューションが依存していることJava 8ストリームとメソッド参照について
Ooh、Java 8には新機能があります。 – paxdiablo
解決策は大好きですが、私は構文があまり得意ではありません。このメソッドはString型の戻り値を持っているので、これをString、[] acceptableColoursのArrayにしたので、これがうまくいくと仮定します。しかし、私はあなたの.fliter()とdouble ::の目的をよりよく理解したいと思います。私は.stream()の後の最後の3つのメソッドでJava 8 Docsを見ていますが、それらを見つけることができません – user3646508
.filterと.findAnyはSteamのメソッドです。 。orElseはオプションのメソッドです。 ::構文については、lamba式を見てください。 – sprinter
正規表現溶液。 ^
は文字列の一致開始を意味します。
public static String GetColor(String input) {
String[] colors = {"red", "blue"};
for(String color : colors) {
if(input.matches(String.format("^%s.*", color)))
return color;
}
return "";
}
- 1. 文字列操作
- 2. 文字列操作
- 3. 文字列操作
- 4. Oracleの列の特殊文字を削除する提案
- 5. MySQLクエリの提案 - 列対ジョイン
- 6. Kotlinと文字列操作で文字列を操作する方法は?
- 7. 文書に対する教師付きのタグの提案
- 8. 文字列操作のアドバイス
- 9. PHPの文字列操作
- 10. jQueryの文字列操作
- 11. PHPの文字列操作
- 12. XML文字列の操作
- 13. Pythonの文字列操作
- 14. バッチファイルの文字列操作
- 15. iphoneの文字列操作
- 16. 文字列のマイナス操作
- 17. javax.xml.transform.Sourceの文字列操作
- 18. MySqlの文字列操作
- 19. awkの文字列操作
- 20. パンダシリーズの文字列操作
- 21. Rubyの文字列操作
- 22. Python Pandas:日時に対する文字列操作のフィルタリングに失敗する
- 23. SQL Server 2005で集中的なCURSOR操作の代替案を提案する
- 24. シェル文字列操作、ワイルドカードスコープ
- 25. プリティ文字列操作
- 26. 文字列操作オーバーラップ
- 27. 文字列操作が
- 28. 複合文字列操作
- 29. iphone +文字列操作
- 30. nodejs:文字列操作
チェックこれをhttp://www.tutorialspoint.com/java/java_string_startswith.htm –
だけヒント:コードを投稿し、それだけではなくイメージしてください。実際のテキストを持つことで、簡単に手助けすることができます(小さなものですからここで大きな違いはありませんが、画像だけを持つことは大きなコードでは頭痛です)。また、テキストを検索可能にします。 –