哪些双精度参数使String.format结果星号

时间:2019-06-27 12:44:36

标签: java string formatting double

我编写了一个位置SDK,该SDK生成了android.location.Location实例。当用户调用Location.toString()方法以获取可读文本时。

Location.toString方法中,我发现如下代码

@Override
public String toString() {
    StringBuilder s = new StringBuilder();
    s.append("Location[");
    s.append(mProvider);
    s.append(String.format(" %.6f,%.6f", mLatitude, mLongitude));
    if (hasAccuracy()) s.append(String.format(" hAcc=%.0f", mHorizontalAccuracyMeters));
    else s.append(" hAcc=???");
    if (mTime == 0) {
        s.append(" t=?!?");
    }
    if (mElapsedRealtimeNanos == 0) {
        s.append(" et=?!?");
    } else {
        s.append(" et=");
        TimeUtils.formatDuration(mElapsedRealtimeNanos / 1000000L, s);
    }
    if (hasAltitude()) s.append(" alt=").append(mAltitude);
    if (hasSpeed()) s.append(" vel=").append(mSpeed);
    if (hasBearing()) s.append(" bear=").append(mBearing);
    if (hasVerticalAccuracy()) s.append(String.format(" vAcc=%.0f", mVerticalAccuracyMeters));
    else s.append(" vAcc=???");
    if (hasSpeedAccuracy()) s.append(String.format(" sAcc=%.0f", mSpeedAccuracyMetersPerSecond));
    else s.append(" sAcc=???");
    if (hasBearingAccuracy()) s.append(String.format(" bAcc=%.0f", mBearingAccuracyDegrees));
    else s.append(" bAcc=???");
    if (isFromMockProvider()) s.append(" mock");

    if (mExtras != null) {
        s.append(" {").append(mExtras).append('}');
    }
    s.append(']');
    return s.toString();
}

我的子类实现是

@Override
public String toString() {
    String superString = super.toString();
    return "ErrorCode[" + mErrorCode + "]," +
            "FromCached[" + mFromCache + "]," +
            superString;
}

结果

ErrorCode[0],FromCached[false], Location[network "31******,114****** acc=559 et=+1d19h24m40s624ms]" 

latitudelongitude会产生什么奇怪的结果?

我尝试了Double.NaNDouble.POSITIVE_INFINITYDouble.MIN_VALUE,但无法获得这个奇怪的结果。

1 个答案:

答案 0 :(得分:1)

更多猜测:您可能正在查看错误 toString()实现。

可能是您的实际位置是该位置的子类。一个关注“隐私”,因此会屏蔽该位置字符串的一部分。

这是很常见的事情:您想确保敏感信息不会直接进入日志或跟踪文件。因此,您编写了一个很好的包装程序,可以很好地掩盖输出的重要部分,例如使用*字符。