Я не могу решить это: java.lang.StringIndexOutOfBoundsException: индекс строки вне диапазона: 54 - PullRequest
0 голосов
/ 28 апреля 2018

Я хочу добавить (суммировать) целочисленные значения, хранящиеся в двух текстовых файлах, и показать суммирование в качестве выходных данных, но после выполнения кода выдает исключение: java.io.FileNotFoundException:

public static void main(String[] args) throws IOException{
    String path="C:/Users/MYPC/Desktop/text.txt";
    String path2="C:/Users/MYPC/Desktop/temp.txt";    
    FileReader fr=null;
    FileReader fr2=null;
    try{
        fr=new FileReader(path); 
        fr2=new FileReader(path2);
        int i,sum=0;
        int i2; 
        Scanner sc=new Scanner(path);
        sc=new Scanner(path2);
        while((i=fr.read())!=-1 &&((i2=fr2.read())!=-1 )) {
             int read1=sc.nextInt(i);
             int read2=sc.nextInt(i2);
             sum = sum + read1+read2;     
        }
        System.out.println(sum);
        System.out.println(sum);
    } catch(Exception ex) {
        System.out.println(ex);
    } finally{
        fr.close();
    }
}

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Передав число в метод nextInt, вы указываете основание. Так, например, если на данной итерации у вас есть 2 для значения i, вы говорите, что вам нужен двоичный файл. Если вы не включите радикс, он будет сканировать в базе 10.

При этом read() из FileReader читает следующий символ, поэтому вам не нужен сканер для сканирования следующего целого числа в любом месте.

Измените код внутри блока try следующим образом (не проверено):

fr = new FileReader(path);
fr2 = new FileReader(path2);
while ((i = fr.read()) != -1 && (i2 = fr2.read()) != -1) {
    char c = (char) i;
    char c2 = (char) i2;
    if (Character.isDigit(c) && Character.isDigit(c2)) {
        int n = Character. getNumericValue(c);
        int n2 = Character.getNumericValue(c2);
        sum += (n + n2);
    } else {
        // TODO handle this somehow
    }
}
0 голосов
/ 28 апреля 2018

почему вы пишете ниже: fr2 = новый FileReader ("");

и затем используйте fr2 для чтения (i2 = fr2.read ())! = - 1)

Итак, где fr2 для чтения, его путь - пустая строка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...