我有一個字符串數組:驗證與數字字符的最少數量的陣列
void populateStringArray()
{
toppings = new String[20];
toppings[0] = "Cheese12";
toppings[1] = "Pepperoni1234";
toppings[2] = "Black Olives1";
// ...
而且我想返回一個以最少數字字符。
有人可以提出實現這一目標的邏輯嗎?
我有一個字符串數組:驗證與數字字符的最少數量的陣列
void populateStringArray()
{
toppings = new String[20];
toppings[0] = "Cheese12";
toppings[1] = "Pepperoni1234";
toppings[2] = "Black Olives1";
// ...
而且我想返回一個以最少數字字符。
有人可以提出實現這一目標的邏輯嗎?
您可以遍歷字符並使用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
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;
}
再次閱讀問題並重新考慮您的答案。 –
感謝您指出@Vash。編輯該方法。 –
有沒有辦法在這裏避免O(n * m)? –
如果使用Guava是一個選項,你可以這樣做:
int digitChars = CharMatcher.DIGIT.countIn(yourString)
你可以在一個字符串str
數的位數與
str.length() - str.replaceAll("\\d", "").length()
簡單如餡餅。
現在您只需循環查看數組toppings
並找到字符串s
,其中str.length() - str.replaceAll("\\d", "").length()
是最不重要的。
您可以使用正則表達式查找字符串中的所有數字和計算的位數:你可以遍歷您的陣列
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)");
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
你有什麼試過的?我將創建一個字符串變量,用於保存迄今爲止使用最少數字的字符串變量,以及一個用於保存數字的int變量,循環訪問數組,並使用正則表達式計算數字的數量,如果正在檢查的數字有較少。 – Tobb