我没有说明为什么这不起作用: (方法取自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.
(....我的问题)中永远不会改变。
有没有人有想法?
答案 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()
调用将以任一方式执行,然后返回值。