似乎是数字的字符串的 NumberFormatException
NumberFormatException for String that appears to be a number
我有一个 JAVA 程序有点问题。
我正在尝试执行 InsertionSort 算法,但似乎是转换程序通过标准输入获取的字符串的问题。程序似乎只处理几个数字,但不适用于这些数字:
https://dl.dropboxusercontent.com/u/57540732/numbers.txt
这是我的算法:
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) + " ");
}
}
}
它适用于少数数字,但不适用于我提供给您的文件。我得到以下异常:
Exception in thread "main" java.lang.NumberFormatException: For input string: "4531"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at Sort.insertionSort(Sort.java:10)
at Sort.main(Sort.java:25)
我不知道为什么会出现这个异常,因为输入的字符串是一个数字 (4531)。有什么建议么?
我无法将所有数字从文件复制并粘贴到终端,所以我正在使用此命令:
javac Sort.java
java Sort < numbers.txt
你在“4531”中有不可见的字符。
如何解决这个:
之后:
al = new ArrayList<String>(Arrays.asList(xs));
写入:
List a2 = new ArrayList<String>(a1.size());
for(String s: a1) {
a2.add(s.replaceAll("[^\d.]", ""));
}
a1 = a2;
如何找到这个字符:
之后:
al = new ArrayList<String>(Arrays.asList(xs));
写入:
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++;
}
我有一个 JAVA 程序有点问题。 我正在尝试执行 InsertionSort 算法,但似乎是转换程序通过标准输入获取的字符串的问题。程序似乎只处理几个数字,但不适用于这些数字: https://dl.dropboxusercontent.com/u/57540732/numbers.txt
这是我的算法:
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) + " ");
}
}
}
它适用于少数数字,但不适用于我提供给您的文件。我得到以下异常:
Exception in thread "main" java.lang.NumberFormatException: For input string: "4531"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.parseInt(Integer.java:615)
at Sort.insertionSort(Sort.java:10)
at Sort.main(Sort.java:25)
我不知道为什么会出现这个异常,因为输入的字符串是一个数字 (4531)。有什么建议么? 我无法将所有数字从文件复制并粘贴到终端,所以我正在使用此命令:
javac Sort.java
java Sort < numbers.txt
你在“4531”中有不可见的字符。
如何解决这个:
之后:
al = new ArrayList<String>(Arrays.asList(xs));
写入:
List a2 = new ArrayList<String>(a1.size());
for(String s: a1) {
a2.add(s.replaceAll("[^\d.]", ""));
}
a1 = a2;
如何找到这个字符:
之后:
al = new ArrayList<String>(Arrays.asList(xs));
写入:
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++;
}