Java Scanner Delimiter
- 異常表示
サンプルコードを引張ってきて実行したらサンプルの結果と違う!
useDelimiterも一度指定すると指定文字以外(デフォルトの区切り文字” ”,”\n”)が解除されてしまう
Scanner.java
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in).useDelimiter(",|\n");;
System.out.println("何か入力してください。");
String str = scanner.next();
System.out.println("入力した文字列は " + str + " です。");
str = scanner.next();
System.out.print("入力した文字列は " + str + " です。");
scanner.close();
}
}
↓System.inしたものをnext()すると何か別の文字を拾ってる?
結果
何か入力してください。
123,456
入力した文字列は 123 です。
入力した文字列は 456
です。
- 修正
System.inしたものを一旦String型インスタンスに格納して再度Scannerをインスタンス
Scanner.java
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in)
System.out.println("何か入力してください。");
String str = scanner.nextLine();
Scanner sc = new Scanner(str).useDelimiter(",|\n");
str = sc.next();
System.out.println("入力した文字列は " + str + " です。");
str = sc.next();
System.out.println("入力した文字列は " + str + " です。");
sc.close();
scanner.close();
}
}
↓サンプルの結果通りに表示された
結果
何か入力してください。
123,456
入力した文字列は 123 です。
入力した文字列は 456 です。
その他の区切り文字
区切り文字
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
多いな、、、