2016-12-23 36 views
-3

我得到这个错误:的String.format()错误:java.util.MissingFormatArgumentException

Caused by: java.util.MissingFormatArgumentException: Format specifier: & 
at java.util.Formatter$FormatToken.unknownFormatConversionException(Formatter.java:1399) 
at java.util.Formatter$FormatToken.checkFlags(Formatter.java:1336) 
at java.util.Formatter.transform(Formatter.java:1442) 
at java.util.Formatter.doFormat(Formatter.java:1081) 
at java.util.Formatter.format(Formatter.java:1042) 
at java.util.Formatter.format(Formatter.java:1011) 
at java.lang.String.format(String.java:1554) 
at java.lang.String.format(String.java:1528) 

在这行代码:

query = String.format(GMAP_QUERY, location, location); 

变量:

private String location = "12.38484,55.43845"; 

static final String GMAP_QUERY = "staticmapcenter=%s&zoom=13&size=300x100&maptype=roadmap%20&markers=color:red%7C%s&style=feature:poi|element:labels|visibility:off"; 

为什么它会抛出异常吗? Format specifier: &是什么意思?

+0

“有2%,它出现。” ......不,只有一个。 'staticmapcenter =%s' –

+0

对不起,有一个错字。还有一个在'&markers = color:red%7C%s'结尾。现在编辑了我的帖子。 SOrry @ cricket_007 – Carlton

回答

1

的问题是在强调的部分:在URL编码中使用

"staticmapcenter=%s&zoom=13&size=300x100&maptype=roadmap%20&markers=color:red%7C%s&style=feature:poi|element:labels|visibility:off"

% s的也解析作为String.format中的格式化程序。他们需要逃脱。例外是抱怨它不明白%20&的含义。

2

看起来你在你的URL空间(%20)&maptype=roadmap%20和(%7C)&markers=color:red%7C只是一个竖线,你已经有&style=feature:poi|element:labels|visibility:off

所以修复这些,并使用一个类URLEncoder来编码你需要格式化的字符串。

String fmt = "staticmapcenter=%s&zoom=13&size=300x100&maptype=roadmap&markers=color:red|%s&style=feature:poi|element:labels|visibility:off"; 
String path = URLEncoder.encode(String.format(fmt, "s1", "s2")); 

这使得staticmapcenter%3Ds1%26zoom%3D13%26size%3D300x100%26maptype%3Droadmap%26markers%3Dcolor%3Ared%7Cs2%26style%3Dfeature%3Apoi%7Celement%3Alabels%7Cvisibility%3Aoff


但是,你正在寻找这个替代可能。

String location = "12.38484,55.43845"; 
String fmt = "staticmap?center=%s&zoom=13&size=300x100&maptype=roadmap&markers=color:red|%s&style=feature:poi|element:labels|visibility:off"; 
String path = String.format(fmt, location, location); 
System.out.print("http://maps.googleapis.com/maps/api/" + path); 

http://maps.googleapis.com/maps/api/staticmap?center=12.38484,55.43845&zoom=13&size=300x100&maptype=roadmap&markers=color:red|12.38484,55.43845&style=feature:poi|element:labels|visibility:off