Come posso verificare se un carattere è una vocale?

Questo codice Java mi dà problemi:

String word =  int y = 3; char z; do { z = word.charAt(y); if (z!='a' || z!='e' || z!='i' || z!='o' || z!='u')) { for (int i = 0; i==y; i++) { wordT = wordT + word.charAt(i); } break; } } while(true); 

Voglio controllare se la terza lettera di parola è una non-vocale, e se lo è voglio che restituisca la non-vocale e tutti i caratteri che la precedono. Se è una vocale, controlla la lettera successiva nella stringa, se è anche una vocale quindi controlla la successiva finché non trova una non-vocale.

Esempio:

word = Jaemeas then wordT must = Jaem

Esempio 2:

    word = Jaeoimus then wordT must = Jaeoim

    Il problema è con la mia affermazione, non riesco a capire come farlo controllare tutte le vocali in quella linea.

    La tua condizione è difettosa. Pensa alla versione più semplice

     z != 'a' || z != 'e' 

    Se z è 'a' allora la seconda metà sarà vera poiché z non è 'e' (cioè l’intera condizione è vera), e se z è 'e' allora la prima metà sarà vera poiché z non è 'a' (di nuovo, l’intera condizione è vera). Naturalmente, se z non è né 'a''e' allora entrambe le parti saranno vere. In altre parole, la tua condizione non sarà mai falsa!

    Probabilmente vorrai && s invece:

     z != 'a' && z != 'e' && ... 

    O forse:

     "aeiou".indexOf(z) < 0 

    Metodo pulito per verificare le vocali:

     public static boolean isVowel(char c) { return "AEIOUaeiou".indexOf(c) != -1; } 

    Che ne dici di un approccio che usa le espressioni regolari? Se si utilizza il modello corretto, è ansible ottenere i risultati dall’object Matcher utilizzando i gruppi. Nell’esempio di codice sotto la chiamata a m.group (1) dovresti restituirti la stringa che stai cercando finché c’è una corrispondenza di modello.

     String wordT = null; Pattern patternOne = Pattern.compile("^([\\w]{2}[AEIOUaeiou]*[^AEIOUaeiou]{1}).*"); Matcher m = patternOne.matcher("Jaemeas"); if (m.matches()) { wordT = m.group(1); } 

    Solo un approccio leggermente diverso che raggiunge lo stesso objective.

    Per i principianti, stai controllando se la lettera è “non a” OPPURE “non e” o “non io” ecc.

    Diciamo che la lettera è io. Quindi la lettera non è un, quindi restituisce “Vero”. Quindi l’intera affermazione è Vero perché io! = A. Penso che quello che stai cercando sia AND le dichiarazioni insieme, non OR loro.

    Una volta fatto questo, devi vedere come incrementare y e ricontrollarlo. Se la prima volta ottieni una vocale, vuoi vedere se anche il prossimo personaggio è una vocale, oppure no. Questo controlla solo il carattere nella posizione y = 3.

    In realtà ci sono modi molto più efficienti per controllarlo, ma dal momento che hai chiesto qual è il problema con il tuo, posso dire che il problema è che devi cambiare quegli operatori OR con gli operatori AND. Con la tua dichiarazione if, sarà sempre vero.

      String word="Jaemeas"; String wordT=""; int y=3; char z; do{ z=word.charAt(y); if(z!='a'&&z!='e'&&z!='i'&&z!='o'&&z!='u'&&y 

    ecco la mia risposta

    Ho dichiarato una costante char [] per i VOWELS, quindi ho implementato un metodo che controlla se un char è una vocale o meno (restituendo un valore booleano). Nel mio metodo principale, sto dichiarando una stringa e convertendola in una matrice di caratteri, in modo che possa passare l’indice dell’array char come parametro del mio metodo isVowel:

     public class FindVowelsInString { static final char[] VOWELS = {'a', 'e', 'i', 'o', 'u'}; public static void main(String[] args) { String str = "hello"; char[] array = str.toCharArray(); //Check with a consonant boolean vowelChecker = FindVowelsInString.isVowel(array[0]); System.out.println("Is this a character a vowel?" + vowelChecker); //Check with a vowel boolean vowelChecker2 = FindVowelsInString.isVowel(array[1]); System.out.println("Is this a character a vowel?" + vowelChecker2); } private static boolean isVowel(char vowel) { boolean isVowel = false; for (int i = 0; i < FindVowelsInString.getVowel().length; i++) { if (FindVowelsInString.getVowel()[i] == vowel) { isVowel = true; } } return isVowel; } public static char[] getVowel() { return FindVowelsInString.VOWELS; } }