我一直试图解决这个问题几个小时,我希望你们中的一个可以帮助我。我有一个文件(实际上有两个,但不重要)有一些行和列,数字和空格之间。我正在尝试用BufferedReader读取它们。这很有效。我可以打印出字符串&然而,我想要的。但是当我尝试解析那些字符串和字符时,我得到以下错误:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at FileProcess.processed(FileProcess.java:30)
at DecisionTree.main(DecisionTree.java:16)
根据我在Google上发现的内容,我认为错误位于我阅读文件的方式。
public class ReadFiles {
private BufferedReader read;
public ReadFiles(BufferedReader startRead) {
read = startRead;
}
public String readFiles() throws IOException {
try {
String readLine = read.readLine().trim();
String readStuff = "";
while(readLine != null) {
readStuff += (readLine + "\n");
readLine = read.readLine();
}
return readStuff;
}
catch(NumberFormatException e) {
return null;
}
}
对于解析位
public class FileProcess {
public String processed() throws IOException {
fileSelect fs = new fileSelect();
ReadFiles tr = new ReadFiles(fs.traning());
String training = tr.readFiles();
ReadFiles ts = new ReadFiles(fs.test());
String test = ts.readFiles();
List liste = new List(14,test.length());
String[] test2 = test.split("\n");
for(int i = 0; i<test2[0].length(); i++) {
char tmp = test.charAt(i);
String S = Character.toString(tmp).trim();
//int i1 = Integer.parseInt(S);
System.out.print(S);
}
这不是我计划对输出执行的实际代码,但错误会显示在已注释掉的代码中。所以我的字符串输出如下:
12112211
解析为整数似乎很好。但它不起作用。我试图手动查看char位置0和1中的内容,0表示我得到1,但是1表示我没有得到""
。那么如何删除""
?我希望你们可以帮助我,如果你需要更多信息,请告诉我。但我想我已经涵盖了所需要的东西。
提前致谢:)
是的,还有另外一件事:如果我用""
替换"0"
它可以正常工作,但是我得到了所有那些我找不到一个聪明的删除方式的零。但有可能在解析或其他什么时跳过它们吗?我的文件只保存1和2,因此如果可能,它不会干扰任何内容。
答案 0 :(得分:0)
如果你有2个彼此相邻的分裂字符(即\ n \ n)或者如果有一个空白字符被传递给trim()调用,那么将返回字符串“”,所以忽略空字符串并携带上。
答案 1 :(得分:0)
您可以使用Scanner类来解析整数,跳过空白:
sc = new java.util.Scanner (line);
sc.nextInt ();
另一个想法是修剪线条,拆分和解析零件:
lin = line.trim ();
String [] words = lin.split (" +");
for (String si : words)
Integer.parseInt (si);