我正在尝试导入一个包含与图形顶点对应的数字的Web文件。第一行说明了有多少个顶点。所以我定义了一个int verticesAmount来对应有多少个顶点。之后,我启动了一个for循环来查看文件中每行的输入,然后通过使用.split(“”)方法将它们分开来将每个数字放入一个数组中。到目前为止所做的一切都很好,当我打印出阵列时,我就把它打印得很好。但是,当我尝试将数组的每个元素转换为INT时,我得到编译器错误,我无法弄清楚原因。任何帮助,将不胜感激。谢谢。
import java.util.Scanner;
import java.io.*;
import java.util.ArrayList;
public class Graph {
public static void main(String[] args)throws Exception{
ArrayList<ArrayList<Integer>> array;
Scanner input2 = new Scanner(System.in);
System.out.println("Enter a URL");
String urlString = input2.next();
java.net.URL url = new java.net.URL(urlString);
Scanner input = new Scanner(url.openStream());
String verticesAmount = input.next();
int amount = Integer.parseInt(verticesAmount);
String[] stringArray = new String[10];
ArrayList<Integer> row = new ArrayList<Integer>();
String line;
for(int i = 0; i < amount; i++){
line = input.nextLine();
stringArray = line.split(" ");
for(int j = 0; j < stringArray.length; j++)
row.add(Integer.parseInt(stringArray[j]));
答案 0 :(得分:3)
问题在于,您要求使用一个空格作为拆分字符来拆分您的行。
如果您要分割这样的一行:
SPACE 5 SPACE SPACE 4
单个空格,结果数组为
[ "", '5', "", '4' ]
如果你在这个数组中运行调用parseInt
的每个字符串,那么你将获得空字符串的异常。
一种快速而肮脏的方法是跳过空字符串。如果您还有一个完全空白的行,这可以帮助您。
在这种情况下,您的分离呼叫通常是
line.trim().split("\\s+")
删除前导空格和尾随空格,并在多个空格的运行中拆分。无论哪种方式,一定要跳过空白行。
答案 1 :(得分:0)
根据给出的评论和示例代码,您收到NumberFormatException
,因为您的ine.split(" ")
可能包含non-numeric data
。请在调用parseInt()
方法
答案 2 :(得分:0)
获取数字的唯一方法是使用正则表达式“\\ d +”并使用Matcher#find()
进行操作。由于您只处理整数,这将起作用。正则表达式将根据您的需要而改变(例如,对于小数等,“\\ d + \。\\ d +”)。
使用这种技术可以保护您免受多个空格,标签,错误的非数字字符......几乎任何事情,真的。