stringbuffer和“0&”导致截断或转义

时间:2012-06-04 21:22:32

标签: java escaping stringbuffer

很抱歉标题不清楚,但我甚至不知道该怎么称呼,我会继续解释发生了什么。

我正在使用Stringbuffer来构建URL。它看起来像这样:

http://maps.googleapis.com/maps/api/geocode/json?latlng=49.0516736,8.38891840&sensor=false

在将单元测试中的此字符串与方法的实际结果进行比较时,我遇到了这种情况。

这是我得到的断言错误:

latlng=49.0516736[,8.38891840]&sensor=false> but was:<...on?latlng=49.0516736[,8.3889184]&sensor=false

重点是 sensor = false

之前的字符序列 0]&amp; 4]&amp;

如果我在&amp; 之前删除零,则测试变为绿色。

然后创建的字符串如下所示:

latlng=49.0516736,8.3889184&sensor=false

所以......正如预期的那样。 这不是问题,0本身被截断,测试会失败 - 我已经证明我的代码正在做它应该做的事情(当我删除零时),但我想知道这里发生了什么。

0&amp; 必须是数组访问或某种转义的某种指示。我不知道。 任何人都知道造成这种行为的原因是什么?

编辑:

这是我正在使用的代码

StringBuffer s = new StringBuffer( grailsApplication.config.geocodingurl.toString() )
s.append(coordinates.latitude)
s.append(",")
s.append(coordinates.longitude)
s.append("&sensor=false")
return s.toString()

1 个答案:

答案 0 :(得分:4)

double转换为String时存在格式/填充问题。

您正在使用的是StringBuilder#append(double),最终会调用Double#toString()

请参阅这些方法的javadoc,了解double值如何转换为String。 或者,如果您想控制代码,请使用NumberFormat或它的子类。