Java 显示为数字的字符串的NumberFormatException

Java 显示为数字的字符串的NumberFormatException,java,string,sorting,insertion-sort,numberformatexception,Java,String,Sorting,Insertion Sort,Numberformatexception,我有一个JAVA程序的小问题。 我试图做一个InsertionSort算法,但它似乎是转换程序通过stdin获得的字符串的问题。程序似乎只处理少数数字,但不处理这些数字: 这是我的算法: public class Sort { private static ArrayList<String> insertionSort(ArrayList<String> arr) { for (int i = 1; i < arr.size(); i++

我有一个JAVA程序的小问题。 我试图做一个InsertionSort算法,但它似乎是转换程序通过stdin获得的字符串的问题。程序似乎只处理少数数字,但不处理这些数字:

这是我的算法:

public class Sort {

    private static ArrayList<String> insertionSort(ArrayList<String> arr) {
        for (int i = 1; i < arr.size(); i++) {
            int valueToSort = Integer.parseInt(arr.get(i).trim());
            int j = i;
            while (j > 0 && Integer.parseInt(arr.get(j - 1).trim()) > valueToSort) {
                arr.set(j, arr.get(j-1));
                j--;
            }
            arr.set(j, Integer.toString(valueToSort));
        }
        return arr;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        ArrayList<String> al;
        String inputNumbers = sc.nextLine();
        String[] xs = inputNumbers.split(" ");
        al = new ArrayList<String>(Arrays.asList(xs));
        al = insertionSort(al);
        for (int i = 0; i<al.size(); i++) {
            System.out.print(al.get(i) + " ");
        }
    }
}
我不知道为什么会出现这个异常,因为输入字符串是一个数字(4531)。有什么建议吗? 我无法将所有数字从文件复制并粘贴到终端,因此我使用以下命令:

javac Sort.java
java Sort < numbers.txt
javac Sort.java
java排序
在“4531”中有不可见字符

如何修复此问题

之后:

    al = new ArrayList<String>(Arrays.asList(xs));
    al = new ArrayList<String>(Arrays.asList(xs));
al=newarraylist(Arrays.asList(xs));
写:

    List a2 = new ArrayList<String>(a1.size());
    for(String s: a1) {
       a2.add(s.replaceAll("[^\\d.]", ""));    
    }
    a1 = a2;
    List a2 = new ArrayList<String>(a1.size());
    int line = 0;
    for(String s: a1) {
       int i = 0;
       for(char c: str.trim().toCharArray() {
           if(!Character.isDigit(c) {
               System.out.println("In line" + line + " char " + i + " isn't digit")
           }
           i++;
       }  
       line++;    
    }
List a2=新的ArrayList(a1.size());
用于(字符串s:a1){
a2.添加(s.replaceAll(“[^\\d.]”,“”);
}
a1=a2;
如何找到此字符的

之后:

    al = new ArrayList<String>(Arrays.asList(xs));
    al = new ArrayList<String>(Arrays.asList(xs));
al=newarraylist(Arrays.asList(xs));
写:

    List a2 = new ArrayList<String>(a1.size());
    for(String s: a1) {
       a2.add(s.replaceAll("[^\\d.]", ""));    
    }
    a1 = a2;
    List a2 = new ArrayList<String>(a1.size());
    int line = 0;
    for(String s: a1) {
       int i = 0;
       for(char c: str.trim().toCharArray() {
           if(!Character.isDigit(c) {
               System.out.println("In line" + line + " char " + i + " isn't digit")
           }
           i++;
       }  
       line++;    
    }
List a2=新的ArrayList(a1.size());
内线=0;
用于(字符串s:a1){
int i=0;
对于(char c:str.trim().toCharArray()){
如果(!Character.isDigit(c){
System.out.println(“In-line”+line+“char”+i+“不是数字”)
}
i++;
}  
line++;
}

我认为问题在于nextLIne()Scanner类有一个名为nextInt()和hasNextInt()的方法。也许您应该尝试使用它们,而不是将字符串解析为整数。完全正确!完美答案。接受此答案。谢谢。输入似乎没有浮点值,因此可以使用
\\D
而不是
[^\\D.]
。要对此稍加改进:此“不可见字符”是一个。