Удалять согласные цепи java

Я хочу удалить согласные цепи, а именно, если он вмешивается привет, который Ваш вывод напечатал oa. У меня есть этот код, но не делает это мне

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

Кто-то видит неудачу? Чтобы отделять согласные гласных, а именно привет hl, если, что я приносит пользу, но для другой формы не.

5
задан 22.01.2017, 13:50
1 ответ

Цепи в Java - immutables. Это значит, что ты не можешь изменять Ваш контент никоим образом.

То, что ты можешь делать, состоит в том, чтобы создавать новую цепь, которая не обладала бы согласными. Ты этого добиваешься, пробежав все символы твоей первоначальной цепи и, характер из-за характера, добавив символы, которые соответствуют.

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;
}
5
ответ дан 03.12.2019, 17:35

И что такой используя StringBuffer?

private static void repetidos(StringBuffer stb){
    //Elimina las vocales de un StringBuffer y lo muestra
    for(int i=0; i<stb.length(); i++){
        if(stb.charAt(i) == 'a' ||
                stb.charAt(i) == 'e' ||
                stb.charAt(i) == 'i' ||
                stb.charAt(i) == 'o' ||
                stb.charAt(i) == 'u' ||
                stb.charAt(i) == 'A' ||
                stb.charAt(i) == 'E' ||
                stb.charAt(i) == 'I' ||
                stb.charAt(i) == 'O' ||
                stb.charAt(i) == 'U'
                ){
            stb.deleteCharAt(i);
        }
    }
    System.out.println(stb);
}

Может казаться, что его один cГіdigo перегружено, чтобы только снимать гласные, но StringBuffer позволяет нам иметь цепь, которая может быть изменяемой, с чем. AdemГЎs, если мы нуждаемся в том, чтобы поместить цепь в одинокий StringBuffer, мы используем такую линию как эта:

stb.append(cadena);

, Где цепь - String. То, что он делает, похожее на

cadena.replace([aeiou], "");

1
ответ дан 24.11.2019, 11:31

Изменяя немного твой код, измените condiciónes k != 'a' из-за условия в коде ascii k != 97и так последовательно проверь это соединение http://ascii.cl/es/, и в ves неравенства используйте равенство, я оставляю тебе код:

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

        }
    }
}

ввод примера = "как эти дружелюбные Вы"

вывод: или или и в или и в i в

делая это для consontantes, члены собрания с решающим голосом, я оставляю пример

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);
    }
}
2
ответ дан 03.12.2019, 17:35

Если в случай, который не часть требований решения задания без expresiónes, ты отрегулируешь, другое очень простое решение используя их. Есть несколько полезных методов используя регулярные выражения - или regex - в классе String и они служат для того, чтобы произвести короткий и довольно понятный код, как только один привык в regex.

Понимая, что цель состоит в том, чтобы удалять всех членов собрания с решающим голосом или удалять все созвучные:

    // 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]", ""));

который он производит:

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
1
ответ дан 03.12.2019, 17:35