2012-12-05 40 views
7

Tôi có vấn đề này đối với bài tập về nhà (tôi thành thật, không cố gắng giấu nó ít nhất) Và tôi đang gặp phải các vấn đề về cách thực hiện.Sử dụng các phương thức chuỗi để tìm và đếm các nguyên âm trong một chuỗi?

Với các khai báo sau: Cụm từ chuỗi = "WazzUp? - Ai là người đầu tiên ??? - IDUNNO"; Viết mã cần thiết vào số đếm số lượng nguyên âm trong chuỗi và in thông báo thích hợp vào màn hình.

Dưới đây là đoạn code tôi có cho đến nay:

String phrase = " WazzUp ? - Who's On FIRST ??? - IDUNNO"; 
int i, length, vowels = 0; 
String j; 
length = phrase.length(); 
for (i = 0; i < length; i++) 
{ 

    j = phrase.substring(i, i++); 
    System.out.println(j); 

    if (j.equalsIgnoreCase("a") == true) 
    vowels++; 
    else if (j.equalsIgnoreCase("e") == true) 
    vowels++; 
    else if (j.equalsIgnoreCase("i") == true) 
    vowels++; 
    else if (j.equalsIgnoreCase("o") == true) 
    vowels++; 
    else if (j.equalsIgnoreCase("u") == true) 
    vowels++; 

} 
System.out.println("Number of vowels: " + vowels); 

Tuy nhiên, khi tôi chạy nó nó chỉ làm cho một loạt các dòng trống. Có ai giúp được không?

+3

'String.char Tại() 'sẽ dễ dàng hơn' String.substring() 'trong trường hợp này. – NullUserException

+1

Có vẻ như một tuyên bố chuyển đổi có thể được thực hiện ở đây. –

+0

thay vì chuyển nó là tốt hơn để tạo ra một danh sách các nguyên âm và sau đó kiểm tra xem list.contains (j) – Gaskoin

Trả lời

8

phrase.substring(i, i++); phải là phrase.substring(i, i + 1);.

i++ cho giá trị i và sau đó thêm 1 vào số đó. Vì bạn có nó ngay bây giờ, String j là hiệu quả phrase.substring(i, i);, mà luôn luôn là chuỗi rỗng.

Bạn không cần thay đổi giá trị i trong phần thân của vòng lặp for vì nó đã được tăng lên trong for (i = 0; i < length; i++).

+0

Khá nhiều những gì tôi sẽ đăng. ngoại trừ tôi không nghĩ rằng gia tăng cuối cùng là cần thiết. – Wes

+0

@Wes Bạn nói đúng. Cảm ơn. – irrelephant

+0

Wow, Cảm ơn bạn rất nhiều! – xSpartanCx

0

Giá trị i + + i sau đã được sử dụng, vì vậy bạn chủ yếu nói chuỗi string.substring (i, i). Vì dấu kết thúc là độc quyền, điều này sẽ luôn trả về một chuỗi rỗng. Một sửa chữa dễ dàng sẽ chỉ là thay đổi nó thành

j = phrase.substring(i, ++i); 

Hy vọng điều đó sẽ hữu ích!

+0

Tôi không nghĩ rằng cần phải có một toán tử gia tăng hoặc tiền tố hoặc postfix. Nhưng có hữu ích của nó để biết những gì các tiền tố và các nhà khai thác postfix làm. – Wes

8

Tôi không thấy cần phải có lệnh in trong vòng lặp.

String s = "Whatever you want it to be.".toLowerCase(); 
int vowelCount = 0; 
for (int i = 0, i < s.length(); ++i) { 
    switch(s.charAt(i)) { 
     case 'a': 
     case 'e': 
     case 'i': 
     case 'o': 
     case 'u': 
      vowelCount++; 
      break; 
     default: 
      // do nothing 
    } 
} 

Điều này chuyển đổi chuỗi thành chữ thường và kiểm tra tất cả ký tự trong chuỗi cho nguyên âm.

+5

Tại sao tạo chuỗi trường hợp người yêu mới trong mỗi vòng lặp lặp lại? Tạo một vòng trước khi vòng lặp sẽ là IMHO hiệu quả hơn. – Pshemo

+0

Điểm tốt. Đã cập nhật. – Whymarrh

+0

'.toLowercase()' là sai, nó phải là '.toLowerCase() ' – MortalMan

-1

public class JavaApplication2 {

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) throws IOException { 
    // TODO code application logic here 
    System.out.println("Enter some text"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    String input = br.readLine().toLowerCase(); 

    char[] vowel = new char[]{'a', 'e', 'i', 'o', 'u'}; 
    int[] countVowel = new int[5]; 
    for (int j = 0; j < input.length(); j++) { 
     char c =input.charAt(j); 
     if(c=='a') 
      countVowel[0]++; 
     else if(c=='e') 
      countVowel[1]++; 
     else if(c=='i') 
      countVowel[2]++; 
     else if(c=='o') 
      countVowel[3]++; 
     else if(c=='u') 
      countVowel[4]++; 


    } 
    for (int i = 0; i <countVowel.length; i++) { 
      System.out.println("Count of vowel " + vowel[i] + "=" + countVowel[i]); 
     } 

    } 
} 
7

Điều này có thể/nên một lớp lót

System.out.println("the count of all vowels: " + (phrase.length() - phrase.replaceAll("a|e|i|o|u", "").length())); 

và String của nó chỉ phương pháp

2

Cải thiện trên một câu trả lời ở trên để xem xét nguyên âm trong mũ :

System.out.println(s.length() - s.toLowerCase().replaceAll("a|e|i|o|u|", "").length()); 
Các vấn đề liên quan