2017-07-30 54 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.