当前位置: 首页 > 知识库问答 >
问题:

如何按每个字符串中的元音数升序对字符串数组排序?

郭凯
2023-03-14
    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;
                    }
                } 
           }
      }
 }

我试图计算每个字符串中的元音,我想根据count变量交换字符串,但我做不到。在接受字符串后,我用toCharArray()函数将其转换为char数组,并将每个字符与小写和大写元音进行比较。

我收到一个错误。编写代码部分的任何帮助都将不胜感激。

输入:

n=4
xyz
bad
aeiou
hello

输出:

aeiou
hello
bad
xyz

共有2个答案

冯宪
2023-03-14

与mumpitz代码类似,但针对性能进行了优化:

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);
姜天宇
2023-03-14

良好的...这可能有点过分(列表和正则表达式),但是如果你不必执行数百万次,那么通过自定义比较器在列表中对它们进行排序就可以了:

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();
    }
});

编辑:通过删除列表进行优化,谢谢@Holger

 类似资料:
  • 我有一个数组: 如何根据数组中每个元素中包含的数字对数组进行排序?

  • 对于类,我需要对文本文件执行多向排序。具体来说,我需要按元音计数,然后按长度组织单词。我的问题在于按元音数量对数组进行排序。 我试图做的是遍历每个单词,并计算该单词的元音。根据元音的数量,它被添加到相应的队列中。 问题是,所有包含元音的单词都被添加到oneVowel队列中,而其余的单词仍然为空。我认为这是因为一旦numVowels增加一次,第一个if语句就会将整个单词添加到第一个队列中。 我该如何

  • 问题内容: 我有一个包含多个数组的数组,我想根据这些数组中的某个字符串对数组进行排序。 如何按名称排序,以便 阿尔伯特排 在首位, 齐默尔曼排 在最后? 我知道如果可以使用整数进行排序,但是字符串使我毫无头绪,该怎么办。 谢谢您帮忙!:) 问题答案: 这可以通过将支持函数作为参数传递给方法调用来实现。 像这样:

  • 问题内容: 我创建了一个sqlite数据库,该数据库具有一个存储温度值的表。第一次将温度值以升序写入数据库。然后,我将数据库中的温度值读取到一个列表中,然后将该列表添加到组合框中以选择温度- 效果很好。 结果列表为: 然后,我向数据库添加一个新的温度值,例如“ 33”。 它被附加到表的末尾。如果我现在阅读温度,列表将变为: 如果我做或,最终的结果是 有什么简单的方法可以按升序对列表进行排序,以便得

  • 问题内容: 我有这样的txt文件中的数据列表 我的任务是按照每个标准对这些数据进行排序,例如)按日期,纬度和经度排序 我尝试像这样的泡沫排序 这可行,但是需要太多时间 那里有在txt文件数据 有没有其他方法可以对这些数据进行排序? 问题答案: 我可能会破坏一些学生的家庭作业,但是这里… 正如课题所建议的那样,Java的自然方法是创建一个表示您的数据的类。然后实现一个将传递给实用方法的方法。 在运行

  • 在我看来最好的情况应该是O(log n),但不确定最坏的情况...也许O(n^2)一次只能匹配一个字母。 谁能给我更多的点子吗?