Java 查找序列中出现两次的最大字符

Java 查找序列中出现两次的最大字符,java,string,loops,char,iteration,Java,String,Loops,Char,Iteration,我的方法findLargestDoubledChar接受一个字符串,当c是出现在相同代码旁边的最大字符时,返回char c。例如:findLargestDoubledChar(look)返回o和findLargestDoubledChar(aaxx)返回x。当没有双精度编码时,它应该返回'\u0000'我花了几个小时玩弄这段代码,这就是我所拥有的。我哪里做错了 public static char findLargestDoubledChar(String string){ c

我的方法findLargestDoubledChar接受一个字符串,当c是出现在相同代码旁边的最大字符时,返回char c。例如:
findLargestDoubledChar(look)
返回
o
findLargestDoubledChar(aaxx)
返回
x
。当没有双精度编码时,它应该返回
'\u0000'
我花了几个小时玩弄这段代码,这就是我所拥有的。我哪里做错了

public static char findLargestDoubledChar(String string){

        char largestDoubleChar = '\u0000';
        String doubleChars = "";

        char[] stringArray = string.toCharArray();

        for(int x = 0; x < stringArray.length - 1; x++) {
            for (int j = x + 1; j < stringArray.length; j++) {
                if(stringArray[x] == stringArray[j]) {
                    System.out.println("Found Double!");
                } else {
                    continue;
                }
            }
        }

        for (int i = 0; i < doubleChars.length(); i++) { //find largest of doubleChars
            if (doubleChars.charAt(i) >= largestDoubleChar) {
                largestDoubleChar = doubleChars.charAt(i);
            } else {
                largestDoubleChar = '\u0000';
                continue;
            }
        }



        return largestDoubleChar;
    }
public静态字符findLargestDoubledChar(字符串){
char largestDoubleChar='\u0000';
字符串doubleChars=“”;
char[]stringArray=string.toCharArray();
对于(int x=0;x=最大的doubleChar){
最大双字符=双字符。字符(i);
}否则{
largestDoubleChar='\u0000';
继续;
}
}
返回最大的doublechar;
}

在第二个循环中,当doublechar被设置为空字符串时,看起来您正在对其进行迭代。也许像这样的方法会更好:

public static char findLargestDoubledChar(String string){

    char largestDoubleChar = '\u0000';
    String doubleChars = "";

    char[] stringArray = string.toCharArray();

    for(int i = 0; i < stringArray.length - 1; i++) {
        if (stringArray[i] == stringArray[i + 1]) {
            System.out.println("Found Double!");
            if (stringArray[i] > largestDoubleChar) largestDoubleChar = stringArray[i];
        }
    }

    return largestDoubleChar;
}
public静态字符findLargestDoubledChar(字符串){
char largestDoubleChar='\u0000';
字符串doubleChars=“”;
char[]stringArray=string.toCharArray();
对于(int i=0;ilargestDoubleChar)largestDoubleChar=stringArray[i];
}
}
返回最大的doublechar;
}

您有一些问题

  • 第一个循环不需要内部循环
  • 当您找到双字符时,您没有存储它。 修改您的示例答案:

    '公共静态字符findLargestDoubledChar(字符串){

    char largestdublechar='\u0000';
    字符串doubleChars=“”;
    char[]stringArray=string.toCharArray();
    对于(int x=0;x=最大的doubleChar){
    最大双字符=双字符。字符(i);
    }否则{
    largestDoubleChar='\u0000';
    继续;
    }
    }
    返回最大的doublechar;
    
    }"


  • 它可以在这样一个语句中完成,该语句还支持补充平面中的Unicode字符,例如emojis

    public static String findLargestDoubledChar(String input) {
        return Character.toString(Pattern.compile("(.)\\1").matcher(input)
                .results().mapToInt(r -> r.group(1).codePointAt(0)).max().orElse('\0'));
    }
    
    试验

    System.out.println(findLargestDoubledChar(“look”);
    System.out.println(findLargestDoubledChar(“aaxx”);
    System.out.println(findLargestDoubledChar(“试试这个


    哎呀,您还有剩余的
    双字符
    。仍然:+1
    
    public static String findLargestDoubledChar(String input) {
        return Character.toString(Pattern.compile("(.)\\1").matcher(input)
                .results().mapToInt(r -> r.group(1).codePointAt(0)).max().orElse('\0'));
    }
    
    System.out.println(findLargestDoubledChar("look"));
    System.out.println(findLargestDoubledChar("aaxx"));
    System.out.println(findLargestDoubledChar("Try this.

    static final Pattern DOUBLE_PAT = Pattern.compile("(.)\\1");
    
    public static char findLargestDoubledChar(String string){
        return DOUBLE_PAT.matcher(string).results()
            .map(x -> x.group().charAt(0))
            .max(Comparator.naturalOrder()).orElse('\u0000');
    }