Neden hasNext() Yanlış, ama hasNextLine() Doğru mu?
Soru
Nasıl bir tarayıcı için hasNext() yöntemi false değerini döndürür hasNextLine() yöntem döndürür true nesne değil mi?
Not: giriş dosyası Dayalı hasNext() yöntem beklendiği gibi sonuç veriyor; hasNextLine() doğru sonuç dönüyor gibi görünmüyor.
Kod
İşte aşağıdaki sonuçlar oluşturan bu çalışan kod:
public void ScannerTest(Reader fileReaderObject){
Scanner scannerObj = new Scanner(fileReaderObject);
for(int i = 1; scannerObj.hasNext(); i ){
System.out.println(i ": " scannerObj.next());
System.out.println("Has next line: " scannerObj.hasNextLine());
System.out.println("Has next: " scannerObj.hasNext());
}
System.out.println();
scannerObj.close();
}
Giriş Dosyası
Aşağıda, bu tarayıcı için geçiyorum bu dosyanın gerçek içeriği
a 3 9
b 3 6
c 3 3
d 2 8
e 2 5
f 2 2
g 1 7
h 1 4
i 1 1
Sonuç
Aşağıdaki kodumu girdim ve bir anlam veremem bölümü içerir: konsol basılmış ne de sonu
25: i
Has next line: true
Has next: true
26: 1
Has next line: true
Has next: true
27: 1
Has next line: true
Has next: false
CEVAP
Eğer dosyanın sonunda tek fazladan bir satır var.
hasNextLine()tamponlinePatternbaşka bir olup olmadığını görmek için denetler.hasNext()tarayıcının ayırıcı ile ayrılmış gibi bir parseable tampon belirteç olup olmadığını görmek için denetler.
Tarayıcının ayırıcı boşluk ve linePattern da boşluk olduğu için, ama parseable belirteçleri tampon linePattern orada olmak için mümkündür.
Tipik olarak, en yaygın yolu, her zaman tüm simgeleri (örneğin sayılar) metnin her satırı ayrıştırma sonra nextLine() çağırarak bu sorunu ile başa çıkmak için. System.in bir kullanıcının giriş de okurken Scanner kullanırken yapmanız gerekir. Bu boşluk ayırıcı geçmiş tarayıcı ilerlemek için, scanner.nextLine() hat ayırıcı temizlemek için kullanmanız gerekir. Bakın: Using scanner.nextLine()
Ek:
LinePattern uyan Pattern olarak tanımlanır:
private static final String LINE_SEPARATOR_PATTERN =
"\r\n|[\n\r\u2028\u2029\u0085]";
private static final String LINE_PATTERN = ".*(" LINE_SEPARATOR_PATTERN ")|. $";
Varsayılan sınırlayıcı belirteç Pattern bu
private static Pattern WHITESPACE_PATTERN = Pattern.compile(
"\\p{javaWhitespace} ");

Neden boyutu int boyutu(int) doÄŸru mu ...
Neden kontrol yanlış bir şifre daha do...
Neden !!1=="1" eÅŸit ve doÄŸru...
0 neden kabuk 1 doğru ama yanlış....
Neden "not(True) [False] DoÄŸru mu...