我有一个程序,我要求用户输入坐标作为字符串。为了使输入更容易阅读并使输入像(x,y)和x,y等于我首先将所有非数字字符更改为“”然后我尝试使用.matches函数来检查两次出现的整数< / p>
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 :(得分:1)
我认为使用Scanner
的首选方法是读取你需要的两个整数,而不是根据正则表达式测试输入,如果扫描不成功,则会捕获某些异常。
https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt()
e.g。
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+
即,一个或多个数字(\d+
),后跟任何内容(.*
),后跟一个字边界(\b
),然后是另一个或多个 - 或者 - 数字(\d+
)
答案 1 :(得分:0)
使用\\s*\\d+\\s+\\d+\\s*
代替[//d] {2}
。
答案 2 :(得分:0)
您可以避免使用正则表达式,只需&#34;搜索&#34;对于第一个和第二个数字。当你达到0到9之间的数字时开始,当你达到非数字时停止。对第二个数字重复相同的操作,你就可以了!
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));