2012-02-17 48 views
2

我试图读取输入单词,但无法弄清楚如何将扫描仪的分隔符设置为空白和标点符号除'(单引号)。 这是我得到的扫描仪的分隔符和正则表达式在java

BufferedReader input; 
String line; 
Scanner sc; 
String word; 
try { 
    input = new BufferedReader(new FileReader(path)); 
    while (input.ready()) { 
     line = input.readLine(); 
     System.out.println("Current Line: " + line); 
     sc = new Scanner(line); 
     sc.useDelimiter("\\W\\s^\'"); 
     //... 
    } 
} 
//... 
+0

'String line = sc.nextLine(); ''String [] words = line.split(“”); ' – run 2012-02-17 08:47:58

+1

@run和标点符号怎么样? – 2012-02-17 08:50:59

+0

是的,我的代码与此类似。 – 0x56794E 2012-02-17 08:58:25

回答

2

我假设你的意思是?

sc.useDelimiter("\\W\\s^\'"); 

我会用

sc.useDelimiter("[^\\w']+"); 

String line= "Hello, world!\n 'Computer\n \n Science'\n Hell\n"; 
System.out.println(Arrays.toString(line.split("[^\\w']+"))); 

打印

[Hello, world, 'Computer, Science', Hell] 

String line= "Hello, world!\n 'Computer\n \n Science'\n Hell\n"; 
Scanner scan = new Scanner(line); 
scan.useDelimiter("[^\\w']+"); 
while(scan.hasNext()) 
    System.out.print("|"+scan.next()); 
System.out.println("|"); 

打印

|Hello|world|'Computer|Science'|Hell| 
+0

我以前试过这个,出于一些奇怪的原因,它似乎确认了换行符。例如,如果我的输入是这样的:“你好,世界!\ n 计算机\ n \ n 科学\ n 地狱\ n” – 0x56794E 2012-02-17 09:05:10

+0

这很奇怪。我已经添加了一个例子。 – 2012-02-17 09:27:07

+0

感谢彼得!你的解决方案确实奏效我只是发现我在别的地方犯了错误! – 0x56794E 2012-02-18 02:19:13

1

您也可以使用标记生成器这样的:

StringTokenizer st1 = new StringTokenizer("a|b|c"); 

while(st1.hasMoreTokens()) 
    System.out.println(st1.nextToken()); 

希望,可以帮助你在你的案件。