devolver todos los valores de cadena que cumplan la condición

No estoy seguro de cómo configurar este método que obtiene como parámetro una matriz de cadenas y tiene que devolver en una nueva matriz todos los valores que cumplan la siguiente condición: el 25% de los caracteres en cada elemento de la matriz son números;

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++){

        }
    }
}

Tenía la idea de que debería ser algo como esto, pero no puedo formatear el código para probar la condición ...

Respuesta 1

Su pregunta básicamente se reduce a descubrir cuántos caracteres en la Cadena cumplen una condición determinada y cuántos no.

Hay dos formas de hacer esto:

1) Simplemente cuente los caracteres:

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++;
}

De hecho, ni siquiera necesita contar los caracteres negativos, porque ese valor es simplemente s.length() - numPositiveChars.

2) Otro enfoque sería utilizar expresiones regulares, por ejemplo, eliminando todos los caracteres no numéricos y luego obtener el recuento de caracteres:

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

Esta línea eliminará todos los caracteres de la cadena que no sean numéricos (no 0-9) y luego devolverá la longitud del resultado (el número de caracteres que son numéricos).

Una vez que tenga la cantidad de caracteres que coinciden con su condición, calcular el porcentaje es trivial.

Respuesta: 2

Solo necesita reemplazar todos los dígitos que no sean en cada elemento y luego comparar la longitud de esta manera:

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);
}

También usaría como resultado una Lista en lugar de una matriz porque no tiene idea de cuántos elementos respeta la condición.

Si desea resolver con la transmisión, puede ser más fácil:

public static String[] returnSentence(String[] str) {
    return Arrays.stream(str)
            .filter(s-> s.replaceAll("\\D", "").length() == s.length() * 0.25)
            .toArray(String[]::new);
}
Respuesta: 3

Private ArrayList <PrinterProfile> printersList = null; Private ArrayList <PrinterProfile> impresoras = nulo; ... método vacío () {... impresoras = (ArrayList <PrinterProfile>) ...

Estoy tratando de recuperar un campo de un JsonObject como String. Este campo "agentid" a veces es tan largo y otras como String. Cuando se trata de un tiempo largo, obtengo una excepción java.lang ...

Tengo una aplicación Java multiproceso. Quiero que toda la aplicación falle es uno de los hilos que encuentra alguna excepción. No creo hacer System.exit (); dentro del hilo saldrá todo ...

¿Hay alguna manera de verificar las conexiones entrantes a ServerSocket, para que mi servidor no se detenga cuando espere que alguien se conecte? Necesito algo como probar {if (server.thereisarequest ()) {Socket ...