簡體   English   中英

Java字符串格式條件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM