2017-09-12 7 views
-1

私は、ユーザーが座標を文字列として入力する必要があるプログラムを持っています。入力を読みやすくし、(x、y)とx、yのような入力を同じにするには、最初にすべての非数値文字を ""に変更してから、.matches関数を使って正確に2つの整数を確認してください文字列内の特定の整数の数をチェックする方法

input = input.replaceAll("[^0-9]"," "); 
Scanner lineRead = new Scanner(input); 
System.out.println(input); 

if(! (input.matches("[//d] {2}")) 
{ 
bad input 
} 

else 
{ 
xPosition = lineRead.nextInt(); 
yPosition = lineRead.nextInt(); 
} 

ただし、入力した内容に関係なく、falseが返されます。私の構文が間違っているか、これはちょうど私ができることではないですか?

+0

「\ d \ d'」のようなものが必要ですか? – sln

答えて

1

入力を正規表現に対してテストするのではなく、Scannerを使用するのが好ましい方法は、2つのintを読み込み、スキャンが成功しない場合は特定の例外をキャッチすることです。

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt()

あなたは、少なくとも二つの整数の存在のための入力をテストする正規表現をしたいです場合は、私は次のようにすると思う

input = input.replaceAll("[^0-9]"," "); 
Scanner lineRead = new Scanner(input); 
System.out.println(input); 

try { 
    xPosition = lineRead.nextInt(); 
    yPosition = lineRead.nextInt(); 
} catch ( 
    InputMismatchException | 
    NoSuchElementException | 
    IllegalStateException ex) { 
    bad input 
} 

\d+.*\b\d+ 

、1桁以上(\d+)です、別の一または-以上、数字が続く、ワード境界(\b)に続いて、何も(.*)が続く(\d+

あなたが正規表現の使用を避けることができ
0

[//d] {2}の代わりに\\s*\\d+\\s+\\d+\\s*を使用してください。

0

ちょうど第一及び第二のために、「検索」 nアンバー。あなたは0から9までの数字を打つと、数字以外の数字を打つと停止します。 2番目の数字で同じことを繰り返して、あなたは行き​​たい!

Scanner scanner = new Scanner(System.in); 
String string = scanner.nextLine(); 

/* Search the first number */ 
int i = 0; 
while (i < string.length() && !Character.isDigit(string.charAt(i))) i++; 
int j = i; 
while (j < string.length() && Character.isDigit(string.charAt(j))) j++; 
int firstCoordinate = Integer.parseInt(string.substring(i, j)); 

/* Search the second number */ 
i = j + 1; 
while (i < string.length() && !Character.isDigit(string.charAt(i))) i++; 
j = i; 
while (j < string.length() && Character.isDigit(string.charAt(j))) j++; 
int secondCoordinate = Integer.parseInt(string.substring(i, j)); 
関連する問題