2014-10-30 16 views
3

영어를 PigLatin으로 번역하는 프로그램을 작성하려고합니다. 나는 현재 단어의 첫 번째 모음을 어디에 위치 시킬지에 대한 부분을 풀기 위해 노력하고있다. 그 방법으로 프로그램은 단어를 적절히 잘라서 적절히 재 배열 할 수있다.단어의 첫 번째 모음이 나오는 위치 찾기

예를 들어 "hello I am a guy"라는 문자열이 "ellohay Iyay amyay ayay uygay"가됩니다. (목록에서 나는 나의 돼지 라틴어가 정확하다고 생각한다. 이것은 내가 만든 예제에서 벗어난다.)

그래서 "what"은 "atwhay"가된다. 프로그램은 첫 번째 모음이 슬롯 2에 있음을 발견하면 .. 나 그 정수, 2

내가 먼저 문자열로 비교 생각하고 있었는데, 다음 모음은 = "aeiouy"거기에서 이동하지만 난 붙어 여기 것은 내가 무엇을 가지고 :

public static int indexOfFirstVowel(String word){ 
    int index=0; 
    String vowels="aeiouy"; 
    return index; 

} 

이론적으로 색인은 첫 번째 모음이있는 위치로 업데이트됩니다.

답변

4

여기 당신이 그것을 할 수있는 하나 개의 방법 :

final static String vowels = "aeiouy"; 
public static int indexOfFirstVowel(String word){ 
    String loweredWord = word.toLowerCase(); 

    for (int index = 0; index < loweredWord.length(); index++) 
    { 
     if (vowels.contains(String.valueOf(loweredWord.charAt(index)))) 
     { 
      return index; 
     } 
    } 

    // handle cases where a vowel is not found 
    return -1; 
} 

이 단순히 문자로 단어를 통해 안내하고, 당신의 모음 문자열 내에 존재하는 경우 각 문자 여부를 확인 할 수 있습니다. 당신은 방법과 문자열의 각 문자를 취할 수

1

수 charAt()

아스키 테이블의 모음을 나타내는 마스크를 사용하지 않는 (extented되지 않음) 왜
public static int englishVowelIndexOf(String word){ 
    char[] vowels = {'a','e','o','i','u','y'}; 
    String wordLowered = word.toLowerCase(); 
    for (int i=0; i < wordLowered.length(); i++){ 
     for (int j=0; j < vowels.length(); j++) { 
      if (wordLowered.charAt(i) == vowels[j]){ 
       return i; 
      } 
     } 
    } 
    return -1; 
} 
+0

불행히도 조금 느리다. – Mike

+0

그는 틀렸다. P - 뭐든간에 ... –

+1

단어를 소문자로 변환하여 문제를 피할 수있다 :'word.toLowerCase(). charAt (i)' – Barranka

0
public static int indexOfFirstVowel(String word){ 
    int i; 
    for(i=0; i<word.length();i++){ 
    switch(word.charAt(i)){ 
     case 'a': 
     case 'e': 
     case 'i': 
     case 'o': 
     case 'u': 
     case 'y': 
     return i; 
    } 
    } 
    return -1; 
} 
+0

(어떤 이상한 논리에서는 문제가되지 않을 수도 있지만) 내가 정의한 바가 없다. –

+0

문자열에 모음이 있는지 여부를 확인하는 것은 이상한 논리는 아니다. –

+0

@johnabrhm 기존의 String 또는 char [] 내에 문자가 포함되어 있는지 확인하는 것보다 12 배의 공간이 필요합니다. .contains()와 같은 내장 메소드는 이런 일을하지 못하게합니다. – furkle

3

?

가장 간단한 솔루션은 아니지만 비트 연산을 사용하기 때문에 실제로는 실제로 빠릅니다.

모음이 없으면 -1을 반환합니다.

public static int indexOfFirstVowel(String aString) { 
    for (int i = 0; i < aString.length(); i++) { 
     char c = aString.charAt(i); 

     if ((c > 64) & ((0x110411101104111L & (1L << (c - 65))) > 0)) { 
      return i; 
     } 
    } 

    return -1; 
} 

편집 :

은 내가 extented ASCII 테이블을 잊어 버렸습니다.

대체 :

if ((c > 64) & ((0x110411101104111L & (1L << (c - 65))) > 0))

121 'y'위한 ASCII 코드

if ((c > 64) & (c <= 121) & ((0x110411101104111L & (1L << (c - 65))) > 0)) 

의해.