Как сделать эту подстановку строки 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() Вызов будет выполнен в любом случае, а затем вернет значение.

Другие вопросы по тегам