2014-01-31 42 views
2

我想要写一个句子是依赖于人的性别,这是我能做些什么:Java字符串格式条件

String createSentence(String name, boolean isMale) { 
    return String.format(isMale ? "I met %s, he was OK." : "I met %s, she was OK.", name); 
} 

但你已经看到了失败(它的工作原理,但代码是duplicit ),我想要的东西是这样的:

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); 
} 
+1

什么不起作用? [你的例子完美地工作。](http://ideone.com/LXNdBd) – BackSlash

+0

你的第一个例子适合我。 – Pshemo

+1

是的,它*做*工作,但它产生了双重性 – kajacx

回答

8

如何约

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类型整数,例如将代表映射

  • 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); 

} 
+0

是的,这解决了这个问题,我简化了这个问题太多了,我的apoligies,我会编辑这个问题。 – kajacx

0
String.format("I met %s, %s was OK.", name, isMale ? "he" : "she"); 
2

你可以去一个组合:

String createSentence(String name, boolean isMale) { 
    return String.format("I met %s, %s was OK.", name, isMale? "he": "she"); 
} 
0

你可以通过代词本身再不用担心任何条件。

static String createSentence(String name, String pronoun) { 
     return String.format("I met %s, %s was OK.", name, pronoun); 
} 

String sentence = createSentence("Fred", "he"); 

如果你需要使用布尔变量,你可以实现一个装饰器。

-1

试试这个:

return "I met "+String.format(isMale ? " %s, he " : " %s, she ", name)+" was OK."