2010-10-13 12 views
5

jeśli (c == "a" || c == 'e' || c == 'i' || c == 'o' || c == 'u') { count ++;sprawdzanie znaków

Kiedy podaję powyższe zdanie, zwraca liczbę samogłosek w danym słowie, tylko jeśli podane słowo jest pisane małymi literami (tzn .: input: friend output 2 vows). Chcę wiedzieć, nawet jeśli podaję wielkie litery lub mieszam, to powinien zwrócić liczbę samogłosek. Jak to zrobić?

+0

+1 dla twojego pytania zainspirowało tak wiele różnych odpowiedzi. – DerMike

+0

ya thank u mike – Sumithra

Odpowiedz

1

można wykorzystywać testy na przykład:

Character.toLowerCase(c) == 'a' 

zamiast tego.

+0

ya Mam to dzięki! – Sumithra

+3

@Sumithra: zauważ, że to się nie powiedzie w tureckim języku, ponieważ ma kropkowane i bez kropek i w obu górnych i małych literach, więc Character.toLowerCase ("I") == "ı" i Character.toUpperCase ("i") == 'İ' http://en.wikipedia.org/wiki/Dzknięty_i_dotless_I –

+0

Jak to się stało niepowodzeniem? –

3

Jeśli chcesz dostać górny lub małe litery proste podejście wydaje się być następujące:

iteracyjne nad wszystkich znaków w słowie i wykonać następujący test:

if (c=='a' || c=='e' || c=='i' || c=='o' || c=='u' 
|| c=='A' || c=='E' || c=='I' || c=='O' || c=='U') 
    { count++ }; 
+5

+1 za użycie "zasady minimalnej zmiany koncepcyjnej".Często jest to pomijane w pośpiechu w kierunku refaktora, ale są sytuacje (takie jak rozwiązywanie problemów produkcyjnych), w których jest to niezbędne, aby zapewnić, że nie wprowadzisz innych problemów. Nie ma nic tak marszczonego, jak wprowadzenie zupełnie nowego błędu w poprawce produkcyjnej :-) – paxdiablo

+0

+1 do komentarza do "zasady minimalnej zmiany pojęciowej" .. nigdy nie znałem tego jako pojęcia, mimo że często go używamy. – Jayan

6

Here Istnieje pełny przykład - pamiętaj, że przed sprawdzeniem samogłosek, zmieniają ciąg na małe litery.

Można też spróbować z przypadku nieczuły wyrażenie regularne przykład od http://www.shiffman.net/teaching/a2z/regex/:

String regex = "[aeiou]";    
Pattern p = Pattern.compile(regex,Pattern.CASE_INSENSITIVE); 
int vowelcount = 0; 
Matcher m = p.matcher(content);   // Create Matcher 
while (m.find()) { 
    //System.out.print(m.group()); 
    vowelcount++; 
} 
+0

Dodatkowym plusem dla wyrażenia regularnego jest to, że można go łatwo wyodrębnić w osobnej metodzie i można go ponownie wykorzystać w innych wzorach. – Ruben

+1

+1 Najbardziej eleganckie rozwiązanie imho –

+0

Hmmm, jak wszyscy wiedzą, regexp to * najszybsze * rozwiązanie. Rozumiem, rozwój ... –

1

powiem ci jedno, jeśli dają obecnie wprowadzone wielkimi literami, a następnie w kodzie Akceptujemy rozdawane umieścić w małe litery.

jeśli łańucha = 'znajomego'

uchwyt str.Tolower(); Proszę, spróbuj tego, myślę, że twój problem został rozwiązany.

9

Jeden succint, prosty sposób to zrobić bez robienia porównań: 10

if ("aeiouAEIOU".indexOf(c) != -1) { count++; } 
1

Nie jest to najbardziej efektywne rozwiązanie, ale chyba najkrótsza? :)

int vowelCount = (inputString+" ").split("(?i)[aoeuiy]").length - 1 

Btw, czy jestem jedynym liczącym "y" jako wovel? ;)

1

Jak o:

if (Arrays.asList('a', 'e', 'i', 'o', 'u').contains(Character.toLowerCase(c))) { 
    ... 
} 

Chciałbym również statyczne ostateczna lista, jak również.

+1

Ta lista powinna być zapakowana w 'Collections.unmodifiableList (..)', gdy zostanie zadeklarowana jako statyczna wersja ostateczna. – whiskeysierra

1

Tutaj jest dość proste narzędzie klasy:

public class Main { 
    public static int countChars(String string, Character... characters) { 
     return countChars(string, new HashSet<Character>(Arrays.asList(characters))); 
    } 

    public static int countChars(String string, Set<Character> characters) { 
     int count = 0; 
     for(int i = 0; i < string.length(); i++){ 
      if(characters.contains(string.charAt(i))){ 
       count++; 
      } 
     } 
     return count; 
    } 

    public static int countCharsIgnoreCase(String string, Character... characters) { 
     return countCharsIgnoreCase(string, new HashSet<Character>(Arrays.asList(characters))); 
    } 

    public static int countCharsIgnoreCase(String string, Set<Character> characters) { 
     Set<Character> finalCharacters = new HashSet<Character>(); 
     for (Character character : characters) { 
      finalCharacters.add(Character.toUpperCase(character)); 
      finalCharacters.add(Character.toLowerCase(character)); 
     } 

     return countChars(string, finalCharacters); 
    } 
} 

code on ideone

1

Korzystanie Guava na CharMatcher:

private final CharMatcher vowels = CharMatcher.anyOf("aeiouAEIOU"); 

... 

// somewhere in your method: 
if (vowels.matches(c)) { 
    ... 
} 
1

Nie widzieliśmy jeszcze Set :-(

static Character charvowels[] = { 'A','I','U','E','O','a','i','u','e','o' }; 
    static Set<Character> vowels = new HashSet<Character>(Arrays.asList(charvowels)); 
    ... 
    public void countVowel(char c) { 
    if (vowels.contains(c)) count++; 
    } 
Powiązane problemy