2017-01-10 16 views
0
import java.util.*; 
    class VowelAsc 
    { 
     public static void main(String args[]) 
     { 
      int count=0; 
      Scanner sc=new Scanner(System.in); 
      int n=sc.nextInt(); 
      String [] s=new String[n]; 
      int [] b=new int[40]; 
      for(int i=0;i<n;i++) 
      { 
       s[i]=sc.next(); 
      } 
      for(int i=0;i<s.length;i++) 
      { 
       char[] a=s[i].toCharArray(); 
       for(int c=0;c<a.length;c++) 
       { 

        if(a[c]=='a' || a[c]=='e' || a[c]=='i' || a[c]=='o' || a[c]=='u' ||a[c]=='A' ||a[c]=='E' || a[c]=='I' || a[c]=='O' || a[c]=='U') 
        { 
         count++; 
         //b[c]=count; 
        } 
       } 
       if(count>0) 
       { 
        if(i<s.length) 
        { 
         String t=s[i]; 
         s[i]=s[i+1]; 
         s[i+1]=t; 
        } 
       } 
      } 
     } 
} 

私は各文字列に存在する母音を数えようとしています。私はそれができないカウント変数に基づいて文字列を入れ替えたいと思っていました。 文字列を受け入れると、toCharArray()関数でchar配列に変換し、各文字を大文字と小文字の母音と比較しています。各文字列の母音の数によって、文字列配列を昇順に並べ替えるにはどうすればよいですか?

エラーが発生します。コードの一部を書く上での助けに感謝します。

入力:

n=4 
xyz 
bad 
aeiou 
hello 

出力:

aeiou 
hello 
bad 
xyz 
+1

とあなたの問題/質問はありますか? – SomeJavaGuy

+0

エラーは何ですか? – Jumwah

+2

「エラーが発生しました」 - どのエラー? –

答えて

3

うーん...これは少しトップ(一覧および正規表現)の上にあるかもしれないが、あなたは、この何百万を実行するために持っていない場合時代の、そしてカスタムコンパレータを経由してリストにそれらをソートする仕事を行います。

String[] s = new String[]{"xyz", "bad", "aeiou", "hello"}; 

Arrays.sort(s, new Comparator<String>(){ 
    @Override 
    public int compare(String o1, String o2) { 
     return o2.replaceAll("[^aeiouAEIOU]", "").length() 
       - o1.replaceAll("[^aeiouAEIOU]", "").length(); 
    } 
}); 

EDIT:リストを削除することによって最適化された、目anks @Holger mumpitzコードに似ていますが、パフォーマンスのために最適化された

+0

String o1とo2について説明してください。 – mahesh

+0

@mahesh彼らは 'compare(String o1、String o2) 'のメソッドパラメータです。 – SomeJavaGuy

+0

彼は、値のコレクション内のすべてのインスタンスを効果的に通過する比較関数を使用しています。最高値。グーグルバブルソートを試してみると、それがどのように機能するかがわかります。これはやや高度な答えですが、非常に良いものです。 – KjetilNordin

1

class Comp implements Comparator<String> { 
    private static boolean[] isVowel = new boolean[127]; 
    static { 
    isVowel['a'] = true; 
    isVowel['e'] = true; 
    isVowel['i'] = true; 
    isVowel['o'] = true; 
    isVowel['u'] = true; 
    } 
    @Override 

    public int compare(String o1, String o2) { 
    return count(o1) - count(o2); 
    } 

    private int count(String s) { 
    int cnt = 0; 
    for (int i=0; i<s.length(); i++) { 
     char c = s.charAt(i); 
     if (c < 128 && isVowel(c)) 
     cnt++; 
     } 
    } 
    return cnt; 
    } 
} 

String[] s = new String[]{"xyz", "bad", "aeiou", "hello"}; 
List<String> sList = Arrays.asList(s); 

Collections.sort(sList, new Comp()); 
s = sList.toArray(s); 
+0

"mumpitzコードと同様に"、 'sList.toArray(s);の呼び出しは時代遅れです。参照[このコメント](http://stackoverflow.com/questions/41571190/how-can-i-sort-a-string-array-in-ascending-order-by-number-of-vowels-in-each- st#comment70355431_41571425)。 – Holger

関連する問題