2016-04-28 42 views
2

該指令用於統計陣列中每個字符串中的數字位數,並將其分配給numberDigits。如何計算數組的每個字符串中有多少位數?

我在做什麼錯在這裏?

public void computeStatistics(String []strings){  
    numberDigits = 0; 
    for(String s : strings){ 
     for(int i : s.toCharArray()){ 
      if(i >= 0 || i <= 2) 
       numberDigits++; 
     } 
    } 
} 
+1

爲什麼不'numberDigits + = s.length();'但是應該有一個單獨的numberDigits爲每個字符串? –

+1

'if(i> = 0 || i <= 2)'總是會返回true,你想要測試什麼? – Maljam

+0

你是指數字字符串的數量?或者字符串的長度? –

回答

0

不是真的知道如果我理解你的問題正確,你計數的字符串數組的位數? public int computeStatistics(String []strings){ int numberDigits = 0; for(String s : strings){ s = s.replaceAll("\D+",""); numberDigits = numberDigits + s.length(); } return numberDigits; }

+0

s = s.replaceAll(「\\ D +」,「」); numberDigits = numberDigits + s.length();這些聲明實際上修正了它。剛剛用你的第二個for循環和numberDigits ++代替了它,它就完成了。謝謝! – stgray

+0

@stgray酷。不是最優化的解決方案,而是最短的代碼。 :) – rankaru

0

我假設你的字符串是alpha數字。你的情況是錯誤的。 char數據類型具有相應ASCII值的整數表示形式。所以char a ='A'被轉換爲int時實際上被存儲爲65.所以存儲在你正在迭代的數組中的char'0'被存儲在48中。你正在檢查0到9個ascii代碼和因此這段代碼不會工作。要麼改變,如果條件爲

if(i>=48 && i<=57) 

或者我覺得作爲一個很好的一般政策是保持char爲char。

for(char ch:s.toCharArrat()) 
    if(ch>='0' && ch<='9') 

這樣你就不必考慮ascii。要將char'0'轉換爲int,請執行以下操作。

int i = (int)ch - (int)'0'; 

這會給出相應的整數。

0

或者,因爲總體數字很重要,所有字符串可以連接爲單個,並且可以檢查每個字符是否是數字。

public void computeStatistics(String[] strings) { 

    numberDigits = 0; 
    //Converting all strings in array to single string 
    String cmbStr = Arrays.toString(strings); 

    for (Character c : cmbStr.toCharArray()) { 
     //checking each character is digit 
     if (Character.isDigit(c)) 
      numberDigits++; 
    } 
} 
相關問題