2012-10-29 50 views
4

我有一個字符串數組:驗證與數字字符的最少數量的陣列

void populateStringArray() 
{ 
toppings = new String[20]; 

toppings[0] = "Cheese12"; 
toppings[1] = "Pepperoni1234"; 
toppings[2] = "Black Olives1"; 
// ... 

而且我想返回一個以最少數字字符。

有人可以提出實現這一目標的邏輯嗎?

+4

你有什麼試過的?我將創建一個字符串變量,用於保存迄今爲止使用最少數字的字符串變量,以及一個用於保存數字的int變量,循環訪問數組,並使用正則表達式計算數字的數量,如果正在檢查的數字有較少。 – Tobb

回答

1

您可以遍歷字符並使用Character.isDigit()來計算字符串中的數字。

String str = "Cheese12"; 
    int count = 0; 
    for (int i = 0; i < str.length(); i++) { 
     if (Character.isDigit(str.charAt(i))) { 
      count++; 
     } 
    } 
    System.out.println(count); 

輸出:

2 
0
String leastChar(){ 

     int leastChar=Integer.MAX_VALUE; 
     String leastTopping=null; 

     int eachToppingTemp=0; 

     for (String topping:toppings){ 

      if (topping==null) continue; 


      eachToppingTemp= Integer.MAX_VALUE; 
      for (char eachChar:topping.toCharArray()){ 
       if (Character.isDigit(eachChar)){ 
        eachToppingTemp++; 
       } 
      } 

      if (eachToppingTemp<leastChar){ 
       leastChar=eachToppingTemp; 
       leastTopping=topping; 
      } 

     } 

     System.out.println("Lowest char topping : "+leastTopping); 
     return leastTopping; 
} 
+0

再次閱讀問題並重新考慮您的答案。 –

+0

感謝您指出@Vash。編輯該方法。 –

+0

有沒有辦法在這裏避免O(n * m)? –

2

如果使用Guava是一個選項,你可以這樣做:

int digitChars = CharMatcher.DIGIT.countIn(yourString) 
2

你可以在一個字符串str數的位數與

str.length() - str.replaceAll("\\d", "").length() 

簡單如餡餅。

現在您只需循環查看數組toppings並找到字符串s,其中str.length() - str.replaceAll("\\d", "").length()是最不重要的。

0

您可以使用正則表達式查找字符串中的所有數字和計算的位數:你可以遍歷您的陣列

public int getNumberOfDigitsInString(String input) { 
    Pattern pattern = Pattern.compile("\\d+"); 
    Matcher matcher = pattern.matcher(input); 
    int count = 0; 
    while (matcher.find()) 
    count += matcher.group().length(); 
    return count; 
} 

現在,找到一個有數字最少的:

int lowestN = Integer.MAX_VALUE; 
String finalString = ""; 
for (String str:toppings) { 
    int currentN = getNumberOfDigitsInString(str); 
    if (lowestN > currentN) { 
    finalStr = str; 
    lowestN = currentN; 
    } 
} 
System.out.println("Result: " + finalStr + " (has " + lowestN + " digits in it)"); 
1
Pattern p = Pattern.compile("-?\\d+"); //regex pattern to find integers on a string 
int index = 0; 
int test; 
int lowest = Integer.MAX_VALUE; 
for (int i : toppings.size()-1){ 
    Matcher m = p.matcher(toppings[i]); 
    if (m.find()) { //assuming only one number to find 
     test = Integer.parseInt(m.group()); 
     if (test < lowest){ 
      lowest = test; 
      index = i; 
     } 
    } 
} 
return patterns[index]; //in case of tie the lowest index wins