Как сделать эту подстановку строки Java (Android)?
Я не понимаю, почему это не работает: (метод взят ЗДЕСЬ на 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 ответ
Решение
Вот ваша проблема:
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()
Вызов будет выполнен в любом случае, а затем вернет значение.