0

理论上很简单,但我找不到答案。

假设我们有字符串:

"Today at ? cars yellow: ? cars red: ? cars black ?"

现在我想通过X以下方式创建执行某些功能:

X("Today at ? cars yellow: ? cars red: ? cars black", value1, value 2, value 3, value 4)

结果得到字符串:

"Today at 12:00 cars yellow: 123 cars red: 11 cars black 24"

是否有X现成可用的功能?如果不是我自己怎么写?

4

7 回答 7

2

即使占位符不是,您最终也可以使用 MessageFormat ?但 {x} 与 x 输入列表中变量的位置:http: //docs.oracle.com/javase/6/docs/api/java/text/MessageFormat.html

于 2013-10-28T21:30:55.860 回答
2

查看 String.format() 文档:String.format() javadoc

于 2013-10-28T21:31:26.200 回答
2

您可以轻松制作一个:

static String X(String sentence, String... args) {
   for (String arg : args) {
        sentence = sentence.replaceFirst("\\?", arg);
    }
    return sentence;
}

如果您能够修改字符串的外观并使用它%s来代替,则?可以使用String.format()代替。

于 2013-10-28T21:34:46.360 回答
1

这应该可以正常工作,查看 String.format() 方法。替换“?”的每个实例 使用 "%s" 然后调用 String.format 并传递所有参数。

while(myString.contains("?")){
  myString = myString.subString(0,myString.indexOf("?")) + "%s" + myString.subString(myString.indexOf("?" + 1));
}
String final = String.format(myString, val1, val2, val3);
于 2013-10-28T22:13:16.310 回答
1
static String x(final String format, final Object... values) {

    String f = format.replace("%", "%%");

    f = f.replace("?", "%s");

    return String.format(f, values);
}
于 2013-10-28T21:50:47.353 回答
0

我认为在 java 中不存在这种方法。但是其中一种实现可以是这个(尽管它的问题太具体了)

public static String X(String s,String s1,String s2,String s3,String s4){
    String[] array = s.split("\\?");
    s=array[0]+s1+array[1]+s2+array[2]+s3+array[3]+s4;
    return s;
} 
于 2013-10-28T21:32:57.257 回答
0

以下解决方案受 Kevin DiTraglia 启发,我认为是完美的(您可以将不同的对象和原始类型作为参数,而不仅仅是字符串)。

/** replaces ? with arguments */
public static String format (String text, Object... args) {
       for (Object arg : args) {
            text = text.replaceFirst(SPECIAL_CHAR, arg.toString());
        }
    return text;
}
于 2013-10-29T00:46:03.477 回答