2013-02-11 58 views
2

我不明白爲什麼這不起作用: (方法取自SO上的HERE)。如何使這個Java(Android)字符串替換?

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

請考慮首先告訴我們你準備用這段代碼做什麼。 – 2013-02-11 17:49:35

+0

感謝減1.我剛剛編輯添加從SO的鏈接。你一直很快。無論如何,這條線'不時從我的請求-1B(這是正常的),這是從來沒有改變n.a. (...我的問題).'解釋說我想改變從'n.a.'中的鏈接方法返回的'-1 B'' – dentex 2013-02-11 17:52:25

+0

不夠公平。我在想,這兩個模塊共同的代碼段有些解釋。 – dentex 2013-02-11 17:55:28

回答

2

這是你的問題:

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

bytes等於-1(小於unit在任何情況下),它返回-1 B而沒有得到的線hr = hr.replace("-1 B", "n.a.");

最好在最後有一個return聲明,在if中分配String hr = bytes + " B",並在接下來的三行中添加一個else塊。然後在該塊之後,hr.replace()調用將以任一方式執行,然後返回該值。

+0

這個工作適合你嗎? – iamnotmaynard 2013-02-11 19:02:55

+0

我現在要試一試。謝謝。我不知道爲什麼我沒有收到郵件通知你的答案! – dentex 2013-02-12 11:29:32

+0

工作正常。 ;) 再次感謝。我明白我有很多東西要學習...... – dentex 2013-02-12 11:46:56