如何使这个Java(Android)字符串替换?

时间:2013-02-11 17:49:02

标签: java android string substitution string-substitution

我没有说明为什么这不起作用: (方法取自HERE关于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.(....我的问题)中永远不会改变。

有没有人有想法?

1 个答案:

答案 0 :(得分:2)

这是你的问题:

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

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

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