web-dev-qa-db-ja.com

Java Scannerで区切り文字を使用するにはどうすればよいですか?

sc = new Scanner(new File(dataFile));
sc.useDelimiter(",|\r\n");

区切り文字がどのように機能するか理解できませんが、誰かがこれを素人の言葉で説明できますか?

46
NoMoreErrors

スキャナーは、空白以外の区切り文字も使用できます。

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(); 

ポイントは、 Scanner::useDelimiter 内の正規表現( regex )を理解することです。 useDelimiterチュートリアル here を見つけます。


正規表現から始めるには ここにあります 素敵なチュートリアル。

ノート

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
75
Jordi Castilla

Scannerでは、デフォルトの区切り文字は空白文字です。

ただし、スキャナーは、startsends区切り文字のセット、次の2つの方法で指定できます:

  1. Scannerメソッドの使用: useDelimiter(String pattern)
  2. Scannerメソッドの使用: useDelimiter(Pattern pattern) ここで、Patternは区切り文字セットを指定する正規表現です。

したがって、useDelimiter()メソッドはScanner入力をトークン化するために使用され、 StringTokenizer class のように動作します。詳細については、これらのチュートリアルをご覧ください。

そして、これが です:

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();
}

この出力を印刷します。

Anna Mills
Female
18
9
cнŝdk

例えば:

String myInput = null;
Scanner myscan = new Scanner(System.in).useDelimiter("\\n");
System.out.println("Enter your input: ");
myInput = myscan.next();
System.out.println(myInput);

これにより、Enterを区切り文字として使用できます。

したがって、次を入力すると:

Hello world (ENTER)

「Hello World」と印刷されます。

3
Eugenio