[英]String only contains 2 integers - Java
使用扫描仪,我怎么能知道我正在扫描的字符串在Java中是否仅包含2个整数?
我已经使用过hasNext()
方法,但是不确定使用什么。 我知道我可以使用hasNextInt()
,但是我的程序要求字符串中没有其他内容。
我假设“仅包含两个整数”的意思是“包含两个令牌,两个令牌都是整数”。 我可能会使用正则表达式来执行此操作,但是如果您想通过扫描来执行此操作,则应执行以下操作:
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;
}
您可以使用以下模式进行操作:
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()));
}
}
hasNext
具有hasNext(regex)
变体,可用于检查下一个令牌是否与regex相匹配,但仅限于一个令牌。 您将必须使用定界符,这可能允许您从两个世界构建令牌。 这样的分隔符看起来像这样
sc.useDelimiter("(?<!\\G\\S+)\\s+");//delimiter representing "every second space"
(您可以在使用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
但是我的程序要求字符串中没有其他内容。
如果您有兴趣检查整个字符串(而不只是部分字符串)是否为两个数字,则可以简单地使用
yourString.matches("\\d+\\s+\\d+")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.