Как определить конец линии с помощью сканера?
у меня есть сканер в моей программе, который читает части файла и форматирует их для HTML. Когда я читаю свой файл, мне нужно знать, как заставить сканер узнать, что он находится в конце строки, и начать писать на следующую строку.
вот соответствующая часть моего кода, дайте мне знать, если я что-то пропустил :
//scanner object to read the input file
Scanner sc = new Scanner(file);
//filewriter object for writing to the output file
FileWriter fWrite = new FileWriter(outFile);
//Reads in the input file 1 word at a time and decides how to
////add it to the output file
while (sc.hasNext() == true)
{
String tempString = sc.next();
if (colorMap.containsKey(tempString) == true)
{
String word = tempString;
String color = colorMap.get(word);
String codeOut = colorize(word, color);
fWrite.write(codeOut + " ");
}
else
{
fWrite.write(tempString + " ");
}
}
//closes the files
reader.close();
fWrite.close();
sc.close();
я узнал о sc.nextLine()
, но я все еще не знаю, как определить, когда я нахожусь в конце строки.
4 ответов
Если вы хотите использовать только сканер, вам нужно создать экземпляр temp string для nextLine() сетки данных (поэтому он возвращает только строку, которую он пропустил) и новый объект сканера, сканирующий временную строку. Таким образом, вы используете только эту строку, и hasNext() не вернет ложноположительный (на самом деле это не ложноположительный, потому что это то, что он должен был сделать, но в вашей ситуации это было бы технически). Вы просто держите nextLine () в первом сканере и меняете временную строку и второй сканер для сканирования каждой новой строки и т. д.
линии обычно delimitted по \n
или \r
поэтому, если вам нужно проверить это, вы можете попробовать сделать это таким образом, хотя я не уверен, почему вы хотите, так как вы уже используете nextLine()
читать целую строку.
здесь Scanner.hasNextLine()
Если вы беспокоитесь о hasNext()
не работает для вашего конкретного случая (не уверен, почему это не так).
вы можете использовать метод hasNextLine для итерации файла строка за строкой, а не слово за словом, а затем разделить строку на пробелы и сделать свои операции над словом
вот тот же код, используя hasNextLine и split
//scanner object to read the input file
Scanner sc = new Scanner(file);
//filewriter object for writing to the output file
FileWriter fWrite = new FileWriter(outFile);
//get the line separator for the current platform
String newLine = System.getProperty("line.separator");
//Reads in the input file 1 word at a time and decides how to
////add it to the output file
while (sc.hasNextLine())
{
// split the line by whitespaces [ \t\n\x0B\f\r]
String[] words = sc.nextLine().split("\s");
for(String word : words)
{
if (colorMap.containsKey(word))
{
String color = colorMap.get(word);
String codeOut = colorize(word, color);
fWrite.write(codeOut + " ");
}
else
{
fWrite.write(word + " ");
}
}
fWrite.write(newLine);
}
//closes the files
reader.close();
fWrite.close();
sc.close();
Wow я использую java в течение 10 лет и никогда не слышал о сканере! По умолчанию он использует разделители пробелов, поэтому вы не можете определить, когда происходит конец строки.
Похоже, вы можете изменить разделители сканера-см. пример в Сканер Класс:
String input = "1 fish 2 fish red fish blue fish";
Scanner s = new Scanner(input).useDelimiter("\s*fish\s*");
System.out.println(s.nextInt());
System.out.println(s.nextInt());
System.out.println(s.next());
System.out.println(s.next());
s.close();