java:给定一个字符串,从中选取数字,按升序排序,然后打印结果



如标题所示。例如,如果输入是9103ndhai*25ma@#$,则程序应该输出012359。这是我的尝试:

public static void main (String args[]) {
    Scanner cin = new Scanner (System.in);
    String myString = "";
    while (cin.hasNext()) {
        int tempInt = cin.nextInt();
        myString = myString + tempInt;
    }
    Scanner intScan = new Scanner (myString);
    List<Integer> intList = new ArrayList();
    while (intScan.hasNext()) {
        int tempInt2 = intScan.nextInt();
        intList.add(tempInt2);
    }
    Collections.sort (intList);
    for (int i=0; i<intList.size(); i++){
        System.out.println(intList.get(i));
    }
}

这给出了错误的结果。我试着特别使用Scanner,但我认为我对这个类有一些误解(会更接近api)。有什么建议吗?

我详细阐述了您的代码并尝试使用它:

  public static void main (String args[]) {
    List<Integer> intList = new ArrayList();
    Scanner cin = new Scanner(System.in);
    System.out.println("Enter the sequence");//9103ndhai*25ma@#$
    String myString = "";
        String tempInt = cin.next();
        for(int i = 0; i< tempInt.length(); i++){
            String s = ""+tempInt.charAt(i);
        if(s.matches("[0-9]"))
            intList.add(Integer.parseInt(""+tempInt.charAt(i)));
        }

    Collections.sort (intList);
    for (int i=0; i<intList.size(); i++){
        System.out.print(intList.get(i));
    }
}

这应该能在中工作

public static void main(String args[]){
    Scanner scanner = new Scanner(System.in);
    String input = scanner.next();
    Pattern p = Pattern.compile("\d"); //Matches single digits (from 0-9) - prepend -? to the regex to react to "negative" digits
    Matcher m = p.matcher(input);
    List<Integer> integers = new ArrayList<Integer>();
    while (m.find()) {
        integers.add(Integer.parseInt(m.group()));
    }
    Collections.sort(integers);
    integers.forEach(System.out::print);
}

最新更新