我如何在Java中与Scanner.useDelimiter一起使用定界符?

问题描述 投票:56回答:3
sc = new Scanner(new File(dataFile));
sc.useDelimiter(",|\r\n");

我不知道分隔符是如何工作的,有人可以用外行的术语解释吗?

java java.util.scanner delimiter
3个回答
87
投票

扫描仪还可以使用空格以外的定界符。

Scanner API中的简单示例:

 String input = "1 fish 2 fish red fish blue fish";

 // \\s* means 0 or more repetitions of any whitespace character 
 // fish is the pattern to find
 Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");

 System.out.println(s.nextInt());   // prints: 1
 System.out.println(s.nextInt());   // prints: 2
 System.out.println(s.next());      // prints: red
 System.out.println(s.next());      // prints: blue

 // don't forget to close the scanner!!
 s.close(); 

重点是要了解regex内部的正则表达式(regex)。查找Scanner::useDelimiter教程Scanner::useDelimiter


以正则表达式开始useDelimiter一个不错的教程。

注意

here

11
投票

使用扫描仪,默认分隔符是空白字符。

但是Scanner可以基于一组定界符定义令牌开始结束的位置,可以通过两种方式指定其位置:

  1. 使用扫描仪方法:here you can find
  2. 使用扫描仪方法:abc… Letters 123… Digits \d Any Digit \D Any Non-digit character . Any Character \. Period [abc] Only a, b, or c [^abc] Not a, b, nor c [a-z] Characters a to z [0-9] Numbers 0 to 9 \w Any Alphanumeric character \W Any Non-alphanumeric character {m} m Repetitions {m,n} m to n Repetitions * Zero or more repetitions + One or more repetitions ? Optional character \s Any Whitespace \S Any Non-whitespace character ^…$ Starts and ends (…) Capture Group (a(bc)) Capture Sub-group (.*) Capture all (ab|cd) Matches ab or cd ,其中模式是指定分隔符集的正则表达式。

因此useDelimiter(String pattern)方法用于标记扫描程序输入,并且行为类似于useDelimiter(Pattern pattern),请查看以下教程以获取更多信息:

这是Setting Delimiters for Scanner

Java.util.Scanner.useDelimiter() Method

打印此输出:

Example

4
投票

例如:

public static void main(String[] args) {

    // Initialize Scanner object
    Scanner scan = new Scanner("Anna Mills/Female/18");
    // initialize the string delimiter
    scan.useDelimiter("/");
    // Printing the tokenized Strings
    while(scan.hasNext()){
        System.out.println(scan.next());
    }
    // closing the scanner stream
    scan.close();
}

这将使您使用Enter作为定界符。

因此,如果您输入:

Anna Mills
Female
18

它将打印'Hello World'。

© www.soinside.com 2019 - 2024. All rights reserved.