【发布时间】:2017-01-30 17:32:43
【问题描述】:
我正在尝试确定Scanner 中的下一个标记是否包含某个字符串。但是,如果令牌中有 \n 或 \r,则 hasNext(String) 方法无论如何都会返回 false。 (我正在使用 Eclipse。)
默认分隔符(空格)不会出现此问题。但是如果使用 useDelimiter() - 甚至将分隔符设置为 " " - 那么 hasNext(String) 总是返回 false。
如果令牌中某处有转义字符并且分隔符也被重置,ScannerhasNext(String) 方法是否总是返回 false?
import java.util.*;
public class ScannerDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner("abcdefg\n\rX");
scanner.useDelimiter("X");
// Returns false!! Why?
System.out.println("" + scanner.hasNext(".*c.*"));
System.out.println(scanner.next());
System.out.println("-------------------------------");
scanner.close();
scanner = new Scanner("abcde\n\rXfg");
scanner.useDelimiter("X");
// Returns false!! Why?
System.out.println("" + scanner.hasNext(".*c.*"));
System.out.println(scanner.next());
System.out.println("-------------------------------");
scanner.close();
scanner = new Scanner("\n\rabcdeXfg");
scanner.useDelimiter("X");
// Returns false!! Why?
System.out.println("" + scanner.hasNext(".*c.*"));
System.out.println(scanner.next());
System.out.println("-------------------------------");
scanner.close();
scanner = new Scanner("abcdeXfg\n\r");
scanner.useDelimiter("X");
// Returns true, as expected
System.out.println("" + scanner.hasNext(".*c.*"));
System.out.println(scanner.next());
System.out.println("-------------------------------");
scanner.close();
scanner = new Scanner("abcdeXfg");
scanner.useDelimiter("X");
// Returns true, as expected
System.out.println("" + scanner.hasNext(".*c.*"));
System.out.println(scanner.next());
System.out.println("-------------------------------");
scanner.close();
}
}
【问题讨论】:
标签: java regex java.util.scanner