Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何查找字符串中最常用的字符_Java_String - Fatal编程技术网

Java 如何查找字符串中最常用的字符

Java 如何查找字符串中最常用的字符,java,string,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; i

我有一个简短的问题。如何在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中正确地做到这一点吗?

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

此外,当您应该使用==时,您正在使用=检查是否相等。我建议使用像Eclipse这样的IDE,它会在您执行此操作时向您显示


编辑:另外,您没有在数组中循环。您只是检查字符串是否包含A或B,如果包含,则添加1。您需要在整个数组中循环。

您不能将字符数组与字符串进行比较,下面的逻辑应该可以工作,并为您提供所需的内容:

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

    }
代码中有几个错误:

  • 如果(numOFA=numob)它不是有效的表达式,则不能使用
    。您应该使用
    ==
    进行比较
  • 您不能将char数组与
    contains
    方法进行比较。它应该用于
    字符串
    对象

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

    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");
    }
    
    String votes=“abab”;
    char[]StoringArray=投票数。toCharArray();
    int B=0;
    int A=0;
    对于(int i=0;iB){
    系统输出打印项次(“A”);
    }否则{
    系统输出打印项次(“B”);
    }
    
    我会给你一个更抽象的解决方案:

    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());
            }
    
    公共类计数器{
    私有字符c;
    私人整数计数;
    计数器(字符c,整数计数){
    这个.c=c;
    这个.count=count;
    }
    公共字符getC(){
    返回c;
    }
    公共无效setC(字符c){
    这个.c=c;
    }
    public int getCount(){
    返回计数;
    }
    public void addOcurrence(){
    这个.count++;
    }
    @凌驾
    公共布尔等于(对象obj){
    如果(obj!=null)
    if(((计数器)obj.getC()==this.c)
    返回true;
    返回false;
    }
    }
    公共静态void main(字符串[]args){
    String voates=“whateveryouwanttoputhere或canbeflomaparameter”;
    char[]storingArray=投票数。toCharArray();
    List listCounter=new ArrayList();
    用于(char aChar:storingArray){
    计数器比较计数器=新计数器(aChar,1);
    if(listCounter.contains(compareCounter)){
    get(listCounter.indexOf(compareCounter)).addOcurrence();
    }否则{
    添加(比较计数器);
    }
    }
    计数器最大值=listCounter.get(0);
    用于(计数器c:listCounter){
    如果(c.getCount()>最大getCount()){
    max=c;
    }
    }
    System.out.println(“出现频率较高的字符是:“+max.getC()”);
    }
    
    看起来您是在测试特定字符的频率,而不是子字符串。使用子字符串是什么意思?你是说性格吗?任何合适的IDE都可以轻松验证语法。使用==运算符检查是否相等,numOFA=numOFB正在将numOFB分配给NUMOFAI是否可以只给显然是家庭作业问题的代码?@DanielPaczuskiBak他似乎是新手,因此更正了代码并解释了他做错了什么。是的,但是你只想知道最常见的字符,知道域名?因为如果你不知道的话。这更复杂。看看我的答案。