理论上简单的事情,但我找不到答案。
我们假设我们有字符串:
"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
功能?如果不是如何写我自己的?
答案 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;
}