возвращает все строковые значения, которые удовлетворяют условию - PullRequest
1 голос
/ 25 марта 2019

Не уверен, как настроить этот метод, который получает в качестве параметра массив String и должен возвращать в новом массиве все значения, которые удовлетворяют следующему условию: 25% символов в каждом элементе массива являются числами;

public static String[] returnSentence(String[] str){
    int nrOfWords = str.length;
    int count = 0;
    for(int i = 0; i < nrOfWords; i++){
        for(int j = 0; j < str[i].length; j++){

        }
    }
}

У меня была идея, что это должно быть что-то вроде этого, но я не могу отформатировать код для проверки условия ...

Ответы [ 3 ]

1 голос
/ 25 марта 2019

Ваш вопрос в основном сводится к выяснению, сколько символов в строке соответствует заданному условию, а сколько - нет.

Есть два способа сделать это:

1) Просто посчитайте символы:

int numPositiveChars = 0;
int numNegativeChars = 0;
for (int i = 0; i < s.length(); i++){
    char c = s.charAt(i);        
    if (/*check c here*/)
        numPositiveChars++;
    else
        numNegativeChars++;
}

На самом деле вам даже не нужно считать отрицательные символы, потому что это значение просто s.length() - numPositiveChars.

2) Другой подход заключается в использовании регулярных выражений, например, удалив все нечисловые символы и затем подсчитав количество символов:

int numPositiveChars = s.replaceAll("[^0-9]+", "").length();

Эта строка удалит все символы из строки, которые не являются числовыми (не 0-9), а затем вернет длину результата (количество символов, которые являются числовыми).

Если у вас есть количество символов, соответствующих вашему состоянию, вычисление процента становится тривиальным.

1 голос
/ 25 марта 2019

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

public static List<String> returnSentence(String[] str) {
    int nrOfWords = str.length;
    List<String> result = new ArrayList<>();
    for (int i = 0; i < nrOfWords; i++) {
        if(str[i].replaceAll("\\D", "").length() == str[i].length() * 0.25){
            result.add(str[i]);
        }
    }
    return result; // If you want an array use : return result.toArray(String[]::new);
}

В качестве результата я бы также использовал список вместо массива, потому что вы понятия не имеетесколько элементов соответствует условию.

Если вы хотите решить с потоковой передачей, это может быть проще:

public static String[] returnSentence(String[] str) {
    return Arrays.stream(str)
            .filter(s-> s.replaceAll("\\D", "").length() == s.length() * 0.25)
            .toArray(String[]::new);
}
0 голосов
/ 25 марта 2019

что-то вроде этого

public static String[] returnSentence(String[] str){
int nrOfWords= str.length;

String[] temp_Str = new String[20];
int count = 0;
int k=0;
for(int i = 0;i<nrOfWords;i++){
    for(int j = 0;j<str[i].length;j++){
      if(Character.isAlphabetic(str[i].getcharat(j)))
   {
     count++;
   }
   if((count/100.0)*100>=25)
    {  temp_Str[k]=str[i];
       k++;
       }


    }
}

}

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