2016-04-28 46 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++; 
    } 
} 
相关问题