Вы не используете (и ID): Scanner
, как указано в заголовке вашего вопроса. Вы создаете два разных и независимых экземпляра Scanner
.
sc
в вашем коде является ссылкой на сканер. Сначала он ссылается на первый объект Scanner
. Затем вы меняете ссылку на объект, чтобы указать на второй объект Scanner
. Вы не используете повторно объекты Scanner
, вы повторно используете ссылку на объект. Это нормально.
Когда объект Scanner
создан, источник, используемый сканером, не может быть изменен. Для получения данных из другого источника требуется создание нового экземпляра.
В вашем примере кода ваш подход к использованию двух разных сканеров для System.in
и файла хорош. Однако проблема в вашем примере заключается в том, что вы используете неправильный конструктор для файла Scanner. Для создания сканера, используя файл в качестве источника, необходимо создать File
или Path
объект и использовать этот объект в качестве параметра конструктора вместо имени файла строки:
new Scanner(new File(filename));
Или:
new Scanner(Paths.get(filename));
Да , ты можешь. Почему ты не попробовал? – xenteros
просто используйте 'if', когда совпадение найдено, повторите инициализацию сканера –
@PavneetSingh у него есть рабочий код. В случае, если имя файла - это путь к файлу с расширением, он будет работать – xenteros