import java.util.*;

import java.util.List;
import java.util.ArrayList;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
   public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str=in.nextLine();//获取两手牌的字符串
        String[] pp=str.split("-");//按照分隔符把两手牌放入字符串数组
        String[] poker1=pp[0].split(" ");//按照空格分开,第一手牌(现在数组里面没有空格了,每一个下标都对应一张牌)
        String[] poker2=pp[1].split(" ");//按照空格分开第二手牌
        //0,首先把大小王的情况排除掉(pp数组的0,1下标是两手牌的全部)
        if(pp[0].equals("joker JOKER")||pp[1].equals("joker JOKER")){
            //出现王炸了,最大,没必要比了
            System.out.println("joker JOKER");
            return;
        }
        //剩下的就不是王炸了
        int size1=poker1.length;//获取两手牌的长数,
        int size2= poker2.length;
        //1,炸弹的情况
        //两边都是炸弹
        if(size1==4&&size2==4){
           compare(poker1,poker2);//比较牌的大小并且输出
            return;//必须return,不然会影响项目的判断
        }
        //一边是炸弹的情况(因为出现两手都是炸弹的情况已经结束退出了,所以这里只会有一手是炸弹的情况
        if(size1==4){//判断谁是炸弹,谁就大(
            prt(poker1);
            return;
        }
        if (size2==4){
            prt(poker2);
            return;
        }
        //2,单个的情况
        if (size1==1&&size2==1){
            compare(poker1,poker2);//比较大小并且输出大的
            return;
        }
        //3,对子的情况(这里的出现单个是两手牌都是对子,炸弹和对王的情况上面已经return了)
        if (size1==2&&size2==2){
            compare(poker1,poker2);//比较大小并且输出大的
            return;
        }
        //4,顺子的情况
        if (size1==5&&size2==5){
            compare(poker1,poker2);//比较大小并且输出大的
            return;
        }
        //三个的情况
        if (size1==3&&size2==3){
            compare(poker1,poker2);//比较大小并且输出大的
            return;
        }
        System.out.println("ERROR");//走到这里就代表着是不能比较的牌了

    }
    public static void prt(String[] arr){//打印较大的那手牌的方法
        for(int i=0;i< arr.length-1;i++){//不打印最后一个,因为会加上空格
            System.out.print(arr[i]);
            System.out.print(" ");//拼接空格
        }
        System.out.print(arr[arr.length-1]);//把最后一个补上去
    }
    public static void compare(String [] poker1,String [] poker2){//比较两手牌的大小,输出大的那个
        //首先判断2的情况,因为大小王外2最大
        if (poker1[0].equals("2")){
            prt(poker1);
            return;
        }
        if (poker2[0].equals("2")){
            prt(poker2);
            return;
        }
        //然后判断10的特殊情况(因为不能使用compareTo方法进行比较1,2,.....9与10的大小,因为10按照此方法比较是小于前面的
        if (poker1[0].equals("10")&&poker2[0].compareTo("9")<0){//10是特殊情况不能使用compareTo方法比较第一手牌是10,且第二手牌大小小于9
            prt(poker1);//第一手牌大,输出
            return;
        }
        if (poker2[0].equals("10")&&poker1[0].compareTo("9")<0){
            prt(poker2);//第二手牌大
            return;
        }
        if(poker1[0].compareTo(poker2[0])>0){//compareTo方法比较字符串大小,若1比2大则返回值大于0,相等则等于0....(比较第一个就行)
            prt(poker1);//第一手牌大,输出
        }else {//反之第二手牌大
            prt(poker2);
        }
    }
 
}

本题的关键就是合理的利用split方法把字符串分开,然后在判断的时候要注意2,和10的比较,不能使用comparTo方法,而是得单独比较

--->"3".compareTo("10")的结果为什么是2

字符串之间的比较是根据它们的字典序进行的。当你调用compareTo()方法比较两个字符串时,它将按照字符顺序逐个比较对应位置的字符。在这种情况下,"3"和"10"都是字符串而不是数字,因此它们的比较是基于字符的ASCII码值。

在ASCII码中,"3"的值是51,而"1"的值是49。因此,比较过程可以被解读为51-49,结果为2。这意味着"3"在字典顺序中排在"10"之前