如何检查字符串中的特定数量的整数

时间:2017-09-12 19:41:31

标签: java regex

我有一个程序,我要求用户输入坐标作为字符串。为了使输入更容易阅读并使输入像(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。我刚才使用正则表达式是我的语法错误或者这不是我能做的事情吗?

3 个答案:

答案 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));