I\'ve tried some ways to detect EOF in my code, but it still not working. I\'ve tried using BufferedReader, Scanner, and using char u001a to flag the EOF, but still not make
You can use try and catch.
Scanner n=new Scanner(System.in);
String input;
int counter=0;
input=n.nextLine();
try{
while(input!=null)
{
char[] charInput=input.toCharArray();
for (int i = 0; i < input.length(); i++) {
if(charInput[i]=='"')
{
if(counter%2==0)
{
System.out.print("``");
}
else
{
System.out.print("''");
}
counter++;
}
else
{
System.out.print(charInput[i]);
}
}
System.out.print("\n");
input=n.nextLine();
}
}catch(Exception e){
}
Here, when you will give Ctrl+z, Scanner.nextLine()
will give you NoSuchElementException
. Use this exception as a condition of EOF. To handle this exception use try and catch.
This is what I did
Scanner s = new Scanner(f); //f is the file object
while(s.hasNext())
{
String ss = s.nextLine();
System.out.println(ss);
}
Worked for me
It keeps running because it hasn't encountered EOF. At end of stream:
read()
returns -1.read(byte[])
returns -1.read(byte[], int, int)
returns -1.readLine()
returns null.readXXX()
for any other X throws EOFException
.Scanner.hasNextXXX()
returns false for any X.Scanner.nextXXX()
throws NoSuchElementException
for any X.Unless you've encountered one of these, your program hasn't encountered end of stream. NB \u001a
is a Ctrl/z. Not EOF. EOF is not a character value.