4

我有一个这样的字符串模板:

http://server/{x}/{y}/{z}/{t}/{a}.json

我有以下价值观:

int x=1,y=2,z=3,t=4,a=5;

我想知道将{x}的值替换为 的有效方法是什么x,也是如此y,z,t,z吗?

4

6 回答 6

16
String template = "http://server/%s/%s/%s/%s/%s.json";
String output = String.format(template, x, y, z, t, a);
于 2013-05-13T07:17:45.157 回答
4

利用MessageFormat.java

MessageFormat messageFormat = new MessageFormat("http://server/{0}/{1}/{2}/{3}/{4}.json");
Object[] args = {x,y,z,t,a};
String result = messageFormat.format(args);
于 2013-05-13T07:21:41.883 回答
4

另一种方法(C# way ;)):

MessageFormat mFormat = new MessageFormat("http://server/{0}/{1}/{2}/{3}/{4}.json");
Object[] params = {x, y, z, t, a};
System.out.println(mFormat.format(params));

输出:

http://server/1/2/3/4/5.json
于 2013-05-13T07:22:33.807 回答
3
http://server/{x}/{y}/{z}/{t}/{a}.json

如果您可以将其更改为http://server/{0}/{1}/{2}/{3}/{4}.json您可以使用MessageFormat

String s = MessageFormat.format("http://server/{0}/{1}/{2}/{3}/{4}.json", x, y, z, t, a);
于 2013-05-13T07:21:41.180 回答
1

要准确替换占位符在示例中的使用方式,您可以使用StrinUtils.replaceEach

org.apache.commons.lang.StringUtils.replaceEach(
"http://server/{x}/{y}/{z}/{t}/{a}.json",
new String[]{"{x}","{y}","{z}","{t}","{a}"},
new String[]{"1","2","3","4","5"});

但是,MessageFormat效率会更高,但需要将 x 替换为 0,将 y 替换为 1 等。

如果您将格式更改为

"http://server/${x}/${y}/${z}/${t}/${a}.json",

您可以考虑使用Velocity,它具有专门用于查找 ${ 和 } 出现的解析器。

最有效的方法是编写自己的解析器搜索下一个 { 出现,而​​不是 },而不是替换占位符。

于 2013-05-13T07:45:32.933 回答
0

这可能是可能的答案。

    String url= "http://server/{x}/{y}/{z}/{t}/{a}.json";
    int x=1,y=2,z=3,t=4,a=5;

    url = url.replaceAll("\\{x\\}", String.valueOf(x));
    url = url.replaceAll("\\{y\\}", String.valueOf(y));
    url = url.replaceAll("\\{z\\}", String.valueOf(z));
    url = url.replaceAll("\\{t\\}", String.valueOf(t));
    url = url.replaceAll("\\{a\\}", String.valueOf(a));

    System.out.println("url after : "+ url);
于 2013-05-13T08:28:08.953 回答