2017-07-30 51 views
3

我有一个char数组(比方说大小4)。我转换成使用字符串:计算Java中的整数字符串中的位数

String str = String.valueOf(cf); // where cf is the char array of size 4. 

此String可以包含0111001011等 现在,我需要计算该字符串的位数。但每次我计算位数(最好用Java)时,它显示4作为结果(也许由于大小4)。我如何计算no。根据输入字符串的数字?

例如:如果001是输入,它应该给出o/p为3等等。

这里的编码部分:

static long solve(int k, long n) 
    { 

    // System.out.println("Entered Solve function"); 
    char[] c = new char[4]; 

    long sum = 0; 
    char[] cf = {}; 

    for(long i=2;i<=n;i++) 
    { 

     cf = fromDeci(c, k, i); 
     String str = String.valueOf(cf); 


     //System.out.println(snew); 
     sum = sum + str.length() ; 
    } 

    return sum; 
} 
+4

***但我每一次计算... ***你怎么这样做.. ??发布代码请 –

+2

为什么'str.length()'不够好? –

+0

str.size()返回所有字符的数量,但他只需要数字 - 一个字符可以比数字多得多。 –

回答

1

是很容易用正则表达式:

String test = "a23sf1"; 
int count = 0; 
Pattern pattern = Pattern.compile("[0-9]"); 
Matcher matcher = pattern.matcher(test); 
while (matcher.find()) { 
    count++; 
} 
System.out.println(count); 
+0

非常感谢你!它现在工作正常。 :) –

+1

@AshishRamtri如果我们帮助你,upvote /接受ot的答案将是很好的:-) –

+1

我试着upvoting的答案,但它显示了这一点:“感谢您的反馈!投票小于记录15个声望,但不要更改公开显示的帖子分数。“ –

1

您可以验证一个字符是否是对数字字符的简单比较的数字。

private int countDigits(char[] cf) { 
    int digitCt = 0; 
    for (char c : cf) { 
     if ((c >= '0') && (c <= '9')) digitCt++; 
    } 
    return digitCt; 
} 
+0

非常感谢!我不知道为什么这件事没有出现在我的脑海里。它现在工作正常。你只是节省了很多时间。 :) –

2

您可以一行使用流API从Java 8,解:

String s = "101"; 
int nb = Math.toIntExact(s.chars()      // convert to IntStream 
          .mapToObj(i -> (char)i)  // convert to char 
          .filter(ch -> isDigit(ch)) // keep the ones which are digits 
          .count());     // count how any they are 
0

否则,您可以使用Apache Commons: (见StringUtils

对于例如: StringUtils.getDigits("abc56ju20").size()

它给你4.