2

我不明白为什么这不起作用:(方法取自HERE on SO)。

private String MakeSizeHumanReadable(int bytes, boolean si) {
    int unit = si ? 1000 : 1024;
    if (bytes < unit) return bytes + " B";
    int exp = (int) (Math.log(bytes) / Math.log(unit));
    String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp-1) + (si ? "" : "i");
    String hr = String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
    hr = hr.replace("-1 B", "n.a.");
    return hr;
}

也不是这个:-

private String MakeSizeHumanReadable(int bytes, boolean si) {
    int unit = si ? 1000 : 1024;
    if (bytes < unit) return bytes + " B";
    int exp = (int) (Math.log(bytes) / Math.log(unit));
    String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp-1) + (si ? "" : "i");
    String hr = String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);

    Pattern minusPattern = Pattern.compile("-1 B");
    Matcher minusMatcher = minusPattern.matcher(hr);
    if (minusMatcher.find()) {
        return "n.a.";
    } else {
        return hr;
    }
}

我不时-1 B从请求中得到(这是正常的),这永远不会改变n.a.(....我的问题)。

有人有想法吗?

4

1 回答 1

2

这是你的问题:

if (bytes < unit) return bytes + " B";

bytes等于 -1(在任何一种情况下都小于unit)时,它会返回-1 B而不会到达 line hr = hr.replace("-1 B", "n.a.");

最好return在末尾有一个语句,在 中赋值String hr = bytes + " B",并在接下来的三行周围if添加一个块。else然后在该块之后,hr.replace()调用将以任一方式执行,然后返回值。

于 2013-02-11T18:22:14.477 回答