Delete consonants from a java string

5

I want to delete the consonants of a string, that is, if hello is entered, its output prints or . I have this code, but it does not do it to me

import java.util.Scanner;
public class vocales {
public static void main(String args[]) {
    Scanner teclado = new Scanner(System.in);

    System.out.println("Escriba una cadena para separar vocales.");
    String x = teclado.next();
    int s = x.length();
    char k;
        for (int i = 0; i < s; i++) {
            k = x.charAt(i);
            if ((k != 'a') || (k != 'e') || (k != 'i') || (k != 'o')
                    || (k != 'u')) {
                k = ' ';
            }
            System.out.print(k);
        }
    }
}

Does anyone see the fault? To separate the consonants from the vowels, that is to say hello hl, if you do it well but for the other form no.

    
asked by Fernando 22.01.2017 в 12:50
source

3 answers

5

Chains in Java are immutable . This means that you can not modify its content in any way.

What you can do is create a new string that does not have the consonants. This is achieved after tracing all the characters of your original string and, character by character, add the corresponding characters.

String x = teclado.next();
String sinConsonantes = "";
int s = x.length();
char k;
for (int i = 0; i < s; i++) {
    k = x.charAt(i);
    if (!esConsonante(k)) {
        sinConsonantes += k;
    }
}
System.out.println("Cadena original: " + x);
System.out.println("Cadena sin consonantes: " + sinConsonantes);

//...

public static boolean esConsonante(char c) {
    //char se puede tratar como un entero
    //asociándolo al código UTF-8 apropiado
    //lo bueno es que los primeros 128 valores de UTF-8
    //se asocian a los valores de código ASCII
    //donde los valores entre 65 y 90 corresponden a
    //las letras A B C hasta la Z (mayúsculas)
    //y los valores 97 al 122 corresponden a las letras
    //a b c hasta la z (minúsculas)
    //como estamos en español, también debemos considerar
    //el caso de la Ñ y ñ (165 y 164, respectivamente)

    //primero evaluemos las mayúsculas
    //c >= 65 & c <= 90 significa que es una letra mayúscula
    //c != 'A' que sea diferente de la letra A
    //lo mismo para las otras vocales en mayúscula
    //se agrega un OR en caso que el caracter sea la Ñ (165)

    //luego evaluamos las minúsculas
    //similar al caso anterior
    //los pongo por separado para facilitar la lectura y comprensión
    //de lo que está sucediendo
    boolean result = false;
    if ((c >= 65 && c=< 90 && c != 'A' && c != 'E'
        && c != 'I' && c != 'O' && c != 'U') || c == 165) {
        result = true;
    } else if ((c >= 97 && c=< 122 && c != 'a' && c != 'e'
        && c != 'i' && c != 'o' && c != 'u') || c == 164) {
        result = true;
    }
    return result;
}
    
answered by 22.01.2017 / 15:15
source
2

Modifying your code a bit, change the k != 'a' conditions for a condition in ascii k != 97 code and so check this link link , and instead of inequality use equality, I leave the code:

import java.util.Scanner;
public class vocales {
public static void main(String args[]) {
    Scanner teclado = new Scanner(System.in);

    String x = "como esta usted amiga";
    int s = x.length();
    char k=' ';

        for (int i = 0; i < s; i++) {
            k = x.charAt(i);

            if ((k == 97) || (k == 111) || (k==101) || (k==105) || (k==117)) {

                  System.out.println(k);
            }else{
                  k = ' ';
                  System.out.println(k);
            }

        }
    }
}
  

example entry="how are you friend"

     

exit: o o e a u a a i a

doing it for consonants, vowels, I leave an example

import java.util.Scanner;
public class vocales {
public static void main(String args[]) {
    Scanner teclado = new Scanner(System.in);

    String x = "como esta usted amiga";
    String cadenaSoloConsonantes="";
    String cadenaSoloVocales="";
    int s = x.length();
    char k=' ';

        for (int i = 0; i < s; i++) {
            k = x.charAt(i);

            if ((k == 97) || (k == 111) || (k==101) || (k==105) || (k==117)) {


                  cadenaSoloVocales+=k;
            }else{
                  cadenaSoloConsonantes+=k;

            }

        }
   System.out.println("cadena: "+x);
   System.out.println("cadena solo vocales: "+cadenaSoloVocales);
   System.out.println("cadena solo consonantes: "+cadenaSoloConsonantes);
    }
}
    
answered by 22.01.2017 в 15:52
1

Just in case it is not part of the requirements to solve the task without regular expressions, another very simple solution using them. There are several useful methods using regular expressions - or regex - in class String and they serve to produce short and well understandable code, once you get used to regex .

Assuming that the goal is to eliminate all vowels or delete all consonants:

    // usando string.replaceAll(String regex, String remplazo)
    String fuente = "Hola, saquemos caracteres";
    System.out.println(fuente);
    // para mejor comparación el remplazo con un espacio
    System.out.println(fuente.replaceAll("[aeiouAEIOU]", " "));
    System.out.println(fuente.replaceAll("[^aeiouAEIOU\s\W_0-9]", " "));
    // y el resultado eliminando los caracteres
    System.out.println(fuente.replaceAll("[aeiouAEIOU]", ""));
    System.out.println(fuente.replaceAll("[^aeiouAEIOU\s\W_0-9]", ""));

that produces:

Hola, saquemos caracteres
H l , s q  m s c r ct r s
 o a   a ue o   a a  e e 
Hl, sqms crctrs
oa, aueo aaee
    
answered by 22.01.2017 в 16:59