Ошибка возникает в этой строке
String uStr = aRow.substring(sepIndex1+ 1, sepIndex2);
, и причина в том, что в вашем файле есть только (макс.) 2 числа и, таким образом, только один пробел, следующий для sepIndex2
-1, поскольку sepIndex1
равно 1
int sepIndex2 = aRow.indexOf(' ', sepIndex1+1);
Для ясности, это то, что я использовал при тестировании.
Окончательный вариант входного файла
9
2
0 1
0 4
1 2
2 5
5 3
3 2
3 0
3 4
6 3
7 6
8 7
И моя версия кода, где я удалиллюбые ссылки на неизвестные классы, такие как Graph
и т. д., а также некоторые другие правки.Это было сделано, так как меня интересовала только логика чтения файла
public static void main(String[] args) {
GraphRead.FileToGraph("~/temp/graf.txt", true, false, false);
}
public static void FileToGraph(String dat, boolean directed, boolean standardIds, boolean weighted) {
FileInputStream fis = null;
try {
fis = new FileInputStream(dat);
} catch (Exception e) {
System.out.println(dat + " couldn't be opened");
System.out.println(e.getMessage());
}
try {
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);
// read number of vertices
String aRow;
aRow = br.readLine();
int n = new Integer(aRow);
// read number of edges
aRow = br.readLine();
int m = new Integer(aRow);
if (!standardIds) { // vertices have arbitrary ids and get a name
// read vertices (1. substring: id, 2. substring: name)
System.out.println("!standardIds");
for (int i = 1; i <= n; i++) {
aRow = br.readLine();
int sepIndex1 = aRow.indexOf(' ');
String vId = aRow.substring(0, sepIndex1);
String vStr = aRow.substring(sepIndex1 + 1, aRow.length());
int id = new Integer(vId);
System.out.println(vId + ":" + vStr);
}
}
// read edges with weight
if (weighted) {
System.out.println("weighted");
for (int i = 1; i <= m; i++) {
aRow = br.readLine();
int sepIndex1 = aRow.indexOf(' ');
int sepIndex2 = aRow.indexOf(' ', sepIndex1 + 1);
String vStr = aRow.substring(0, sepIndex1);
String uStr = aRow.substring(sepIndex1 + 1, sepIndex2);
String wStr = aRow.substring(sepIndex2 + 1, aRow.length());
System.out.println(uStr + ":" + wStr);
}
} else { // read edges without weight;
System.out.println("!weighted");
for (int i = 1; i <= m; i++) {
aRow = br.readLine();
int sepIndex1 = aRow.indexOf(' ');
String vStr = aRow.substring(0, sepIndex1);
String uStr = aRow.substring(sepIndex1 + 1, aRow.length());
System.out.println(vStr + ":" + uStr);
}
}
fis.close();
} catch (Exception e) {
System.out.println("Reading was not successful");
System.out.println(e.getMessage());
}
}