[英]Java string format condition
我想寫一個取決於人的性別的句子,這是我可以做的:
String createSentence(String name, boolean isMale) {
return String.format(isMale ? "I met %s, he was OK." : "I met %s, she was OK.", name);
}
但你已經看到了失敗(它有效,但代碼是重復的),我想要這樣的東西:
String createSentence(String name, boolean isMale) {
return String.format("I met %s, %b?'he':'she' was OK.", name, isMale);
}
這個 ofc 不起作用,但是這樣的事情可能嗎?
編輯:
由於我希望生成許多句子,即使是不同的語言,並且它們將存儲為某種類型或數組,因此此解決方案不方便:
static String createSentence(String name, boolean isMale) {
return String.format("I met %s, "+(isMale?"he":"she")+" was OK.", name);
}
怎么樣
return String.format("I met %s, "+(isMale?"he":"she")+" was OK.", name);
或者
return String.format("I met %s, %s was OK.", name, (isMale ? "he" : "she"));
如果您可以將isMale
類型isMale
為整數,例如表示映射
0
-> she
,1
-> he
您可以使用MessageFormat及其{id,choce,optionValue}
static String createSentence(String name, int isMale) {
return MessageFormat.format("I met {0}, {1,choice,0#she|1#he} is fine",
name, isMale);
}
你可以選擇一個組合:
String createSentence(String name, boolean isMale) {
return String.format("I met %s, %s was OK.", name, isMale? "he": "she");
}
String.format("I met %s, %s was OK.", name, isMale ? "he" : "she");
使用enum
怎么樣?
enum Gender {
FEMALE("she"), MALE("he") /* ... */;
private final String pronoun;
private Gender(String pronoun) {
this.pronoun = pronoun;
}
public String pronoun() {
return pronoun;
}
}
private static String createSentence(String name, Gender gender) {
return String.format("I met %s, %s was OK.", name, gender.pronoun());
}
public static void main(String[] args) {
System.out.println(createSentence("Glenda", Gender.FEMALE));
System.out.println(createSentence("Glen", Gender.MALE));
}
您可以傳遞代詞本身,然后不必擔心任何情況。
static String createSentence(String name, String pronoun) {
return String.format("I met %s, %s was OK.", name, pronoun);
}
String sentence = createSentence("Fred", "he");
如果你需要使用布爾變量,你可以實現一個裝飾器。
嘗試這個 :
return "I met "+String.format(isMale ? " %s, he " : " %s, she ", name)+" was OK."
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.