4

私は文字列の配列を持っています:

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

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

そして、数字が最も少ないものを返したいです。

これを達成するためのロジックを提案できますか?

4

6 に答える 6

2

Guavaの使用がオプションの場合は、次のようにするだけです。

int digitChars = CharMatcher.DIGIT.countIn(yourString)
于 2012-10-29T16:11:05.393 に答える
2

str文字列の桁数を数えることができます

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

パイのようにシンプル。

あとは、配列をループして、最小の文字列をtoppings見つけるだけです。sstr.length() - str.replaceAll("\\d", "").length()

于 2012-10-29T16:12:06.163 に答える
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
于 2012-10-29T16:20:27.040 に答える
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 
于 2012-10-29T16:03:12.073 に答える
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;
}
于 2012-10-29T16:08:59.487 に答える
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)");
于 2012-10-29T16:15:32.113 に答える