Сканер отключает мою Строку приблизительно после 2 400 символов

У меня есть некоторый очень простой код как

while (scan.hasNextLine())
{
    String temp = scan.nextLine();
    System.out.println(temp);
}

где сканированием является Сканер по файлу.

Однако на одной конкретной строке, которая является о 6k символах долго, временный файл отключает после чего-то как 2 470 символов. Нет ничего специального о том, когда оно отключает; это посреди слова "Australia". Если я удаляю символы из строки, место, где это отключает изменения; например, если я удалю символы 0-100 в файле затем, то Сканер получит то, что было ранее 100-2570.

Я использовал Сканер для больших строк прежде. Какая-либо идея, что могло идти не так, как надо?

6
задан skaffman 8 May 2011 в 09:54
поделиться

1 ответ

по адресу предположение, у вас может быть мошеннический персонаж в точке отсечки: посмотрите файл в шестнадцатеричном редакторе, а не только в текстовом редакторе. Возможно, есть встроенный нулевой символ или, возможно, \ r в середине строки? Мне кажется маловероятным, что Scanner.nextLine () просто произвольно отрезал бы его.

Еще одна мысль: вы на 100% уверены, что там не все? Возможно, System.out.println разрезает строку - опять же из-за встроенного в нее какого-то "нечетного" символа? Что произойдет, если вы напечатаете temp.length () ?

РЕДАКТИРОВАТЬ: Я неверно истолковал бит о том, что произойдет, если вы вырежете некоторые символы. Прости за это. Еще несколько вещей, которые нужно проверить:

  • Если вы читаете строки с BufferedReader.readLine () вместо Scanner , все ли он получает?
  • Правильно ли вы указываете кодировка? Я не понимаю, почему это проявляется именно таким образом, но есть над чем подумать ...
  • Если вы замените все символы в строке на «A» (в файле), это что-то изменит?
  • Если вы добавите дополнительную строку перед этой строкой (или удалите строку перед ней), это что-то изменит?

Если все это не получится, я бы просто отлаживал в Scanner.nextLine () - одна из приятных особенностей Java заключается в том, что вы можете выполнять отладку в стандартные библиотеки.

8
ответ дан 16 December 2019 в 21:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: