java怎么替换?带有值的字符串

时间:2013-10-28 21:26:48

标签: java

理论上简单的事情,但我找不到答案。

我们假设我们有字符串:

"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功能?如果不是如何写我自己的?

7 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

答案 2 :(得分:2)

你可以轻松制作一个:

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

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

答案 3 :(得分:1)

static String x(final String format, final Object... values) {

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

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

    return String.format(f, values);
}

答案 4 :(得分: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);

答案 5 :(得分: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;
} 

答案 6 :(得分: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;
}