字符串只包含2个整数 - Java

时间:2014-12-09 23:33:22

标签: java string integer contains

使用扫描仪,我如何能够判断我扫描的字符串是否只包含Java中的2个整数?

我已经使用了hasNext()方法,但我不确定要使用什么。我知道我可以使用hasNextInt(),但我的程序要求字符串中没有其他内容。

3 个答案:

答案 0 :(得分:1)

我假设“只包含两个整数”意味着“包含两个标记,两个标记都是整数”。我可能会使用正则表达式执行此操作,但如果您想通过扫描执行此操作,则应执行以下操作:

public boolean hasTwoIntegers(String s){
  Scanner sc = new Scanner(s);
  if (!scanner.hasNextInt()) return false;
  scanner.nextInt();
  if (!scanner.hasNextInt()) return false;
  if (scanner.hasNext()) return false;
  return true; 


}

广义处理N个整数:

public boolean hasNIntegers(String s, int n){
  Scanner sc = new Scanner(s);
  for (int i = 0; i <n; i++){
    if (!scanner.hasNextInt()) return false;
    scanner.nextInt();
  }
  if (scanner.hasNext()) return false;
  return true; 

}

答案 1 :(得分:1)

你可以用一种模式来做:

import java.util.regex.Pattern;

public class Patternizer {
    public static void main(String[] args){
        Pattern p=Pattern.compile("\\d+ \\d+");
        System.out.print("1000 10000".matches(p.pattern()));
        System.out.print("mmd 10000".matches(p.pattern()));
        System.out.print("1000.0 10000".matches(p.pattern()));
    }
}

答案 2 :(得分:0)

hasNext具有变体hasNext(regex),可用于检查下一个令牌是否与正则表达式匹配,但仅限于一个令牌。您将不得不使用分隔符,这可以允许您从两个世界构建令牌。这样的分隔符可能看起来像这样

sc.useDelimiter("(?<!\\G\\S+)\\s+");//delimiter representing "every second space"

(你可以在Extracting pairs of words using String.split()中找到这个正则表达式的解释)。

这将允许您使用hasNext("\\d+\\s+\\d+")来检查下一个标记是否为数字,空格,数字。

测试完成后,如果您有兴趣稍后阅读单字标记,可以将分隔符设置为标准分隔符。

代码示例

String data = "foo 12 32 bar";

Scanner sc = new Scanner(data);
Pattern delimiter = sc.delimiter();//default delimiter

System.out.println(sc.next());//foo
sc.useDelimiter("(?<!\\G\\S+)\\s+");//delimiter representing "every second space"

System.out.println(sc.hasNext("\\d+\\s+\\d+"));//TRUE

sc.useDelimiter(delimiter);//reset delimiter

System.out.println(sc.nextInt());//12
System.out.println(sc.nextInt());//32
System.out.println(sc.next());//bar

  

但我的程序要求String中没有其他内容。

如果你有兴趣检查整个字符串(不只是它的某些部分)是两个数字而不是你可以简单地使用

yourString.matches("\\d+\\s+\\d+")