如何在String中查找最常见的字符

时间:2015-08-19 14:58:54

标签: java string

我有一个简单的问题。如何在Java中找到字符串中最常见的字符。我在逻辑上知道如何做,但我不确定我的语法是否正确:

public class HelloWorld {
  public static void main(String[] args){


    String votes = "ABBAB";

    char[] StoringArray = votes.toCharArray();

    int numOFB = 0;
    int numOFA = 0;

    if (StoringArray.contains("A")) {
      numOFA++;
    } else if (StoringArray.contains("B")) {
              numOFAB++;
              }

    if (numOFA = numOFB) {
    System.out.println("Tie");
    } else if (numOFA > B) {
    System.out.println("A");
    } else {
    System.out.println("B");
    }

  }
}

有人可以帮我解决如何在Java中正确执行此操作吗?

4 个答案:

答案 0 :(得分:1)

你无法将char数组与字符串进行比较,下面的逻辑应该可以正常工作并为你提供所需的内容:

   public static void main(String[] args){

        String votes = "ABBAB";

        char[] storingArray = votes.toCharArray();

        int numOFB = 0;
        int numOFA = 0;
        for(char c : storingArray) {
            if(c == 'A') {
                numOFA++;
            }
            if(c == 'B') {
                numOFB++;
            }
        }
        if (numOFA == numOFB) {
            System.out.println("Tie");
        } else if (numOFA > numOFB) {
            System.out.println("A");
        } else {
            System.out.println("B");
        }

    }

您的代码中有几处错误:

  1. 您无法使用if (numOFA = numOFB)它无效的表达式。您应该使用==进行比较
  2. 您无法将char数组与contains方法进行比较。它应该在String object
  3. 上使用

答案 1 :(得分:0)

正如评论所说;它看起来像是在计算A或B的数量,而不是最长的子串。你只是在分析一个由A和B组成的字符串吗?

另外,当你应该使用==时,你正在使用=来检查是否相等。我建议使用像Eclipse这样的IDE,它会在你这样做的时候告诉你。

编辑:同样,你没有循环遍历数组。您只是检查字符串是否包含A或B,如果包含,则添加1。你需要遍历整个数组。

答案 2 :(得分:0)

实际上,我正在使用它,我发现这是最好的方法:

String votes = "ABBAB";

char[] StoringArray = votes.toCharArray();

int B = 0;
int A = 0;

for (int i = 0; i < StoringArray.length; i ++) {
if (StoringArray[i] == 'A') {
  A++;
} else if (StoringArray[i] == 'B') {
          B++;
          }

}

if (A == B) {
System.out.println("Tie");
} else if (A > B) {
System.out.println("A");
} else {
System.out.println("B");
}

答案 3 :(得分:0)

我会给你一个更抽象的解决方案:

public class Counter{
        private char c;
        private int count;

        Counter(char c, int count){
            this.c=c;
            this.count=count;
        }

        public char getC() {
            return c;
        }
        public void setC(char c) {
            this.c = c;
        }
        public int getCount() {
            return count;
        }
        public void addOcurrence() {
            this.count++;
        }

        @Override
        public boolean equals(Object obj) {

            if(obj!=null)
                if(((Counter)obj).getC()== this.c)
                    return true;            

            return false;
        }
}



public static void main(String[] args){

        String votes = "whateveryouwanttoputhereorcanbefromaparameter";

            char[] storingArray = votes.toCharArray();

            List<Counter> listCounter = new ArrayList<Counter>();

            for(char aChar : storingArray){
                Counter compareCounter = new Counter(aChar,1);
                if(listCounter.contains(compareCounter)){
                    listCounter.get(listCounter.indexOf(compareCounter)).addOcurrence();
                }else{
                    listCounter.add(compareCounter);
                }
            }

            Counter max = listCounter.get(0);
            for( Counter c : listCounter){
                if(c.getCount() > max.getCount()){
                    max = c;
                }
            }

            System.out.println("the character with more ocurrence is: "+max.getC());
        }