Можно ли удалить элементы в массиве строк, который не является числом, в то время как в цикле for? - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь найти наибольшее число в массиве строк, который включает буквы.Как удалить элементы, которые не являются числовыми, из массива, пока он находится в цикле For?

String word = "abcd:1234";
String[] testArray = test2.split("");


int max = Integer.MIN_VALUE, maxIndex = 0;
int secondMax = Integer.MIN_VALUE;

for (int i = 0; i < testArray.length; i++) {
    if (Integer.parseInt(testArray[i]) > max) {
        secondMax = max;
        max = Integer.parseInt(testArray[i]);
        maxIndex = i;
    }else if(secondMax < Integer.parseInt(testArray[i])){
        secondMax = Integer.parseInt(testArray[i]);
    }
}
System.out.println(secondMax);

Ответы [ 4 ]

3 голосов
/ 27 июня 2019

вы можете использовать поток Java 8 для этого

int max = word.chars()
            .filter(Character::isDigit)
            .map(Character::getNumericValue)
            .max()
            .orElse(Integer.MAX_VALUE);
1 голос
/ 27 июня 2019

Чтобы удалить из массива String элементы, которые не соответствуют целым числам, вы можете сделать следующее:

      // simple method that doesn't reply on exception handling
      String[] vals = { "amdjd", "22arss", "2213", "22133", "alal", "aala", "33"
      };
      List<String> list = new ArrayList<>();
      for (String s : vals) {
         // check to ensure all characters are digits.
         if (s.replaceAll("\\d", "").equals("")) {
            list.add(s);
         }
      }
      String[] result = list.toArray(new String[0]);
      System.out.println(Arrays.toString(result));

Иногда помогает вспомогательный метод, который делает весь процесс чище. Оба приведенных ниже варианта отфильтровывают все, что не является числом.

      List<String> list = new ArrayList<>();
      for (String s : vals) {
         if (isANumber(s)) {
            list.add(s);
         }
      }
      result = list.toArray(new String[0]);
      System.out.println(Arrays.toString(result));

Использование потоков Java 8+.

      result = Arrays.stream(vals).filter(a -> isANumber(a)).toArray(
            String[]::new);
      System.out.println(Arrays.toString(result));

Вспомогательный метод для проверки, является ли строка числом.

   private static boolean isANumber(String s) {
      try {
         Double.parseDouble(s);
         return true;
      }
      catch (IllegalArgumentException ne) {
         return false;
      }
   }
1 голос
/ 27 июня 2019

или без лямбды

String word = "abcd:1234";
int max = Integer.MIN_VALUE, maxIndex = 0;

for (int i = 0; i < word.length(); i++) {
    if (Character.isDigit(word.charAt(i))) {
        int number = Character.getNumericValue(word.charAt(i));
        if(number > max) {
            max = number;
            maxIndex = i;
        }
    }
}
System.out.println("Max number: " + max);
System.out.println("Max index: " + maxIndex);

выход

Max number: 4
Max index: 8
0 голосов
/ 27 июня 2019

Вы можете использовать метод isNumeric(), чтобы проверить, содержит ли элемент массива буквы или нет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...