【问题标题】:String only contains 2 integers - Java字符串仅包含 2 个整数 - Java
【发布时间】:2015-02-08 01:09:23
【问题描述】:

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

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

【问题讨论】:

  • “2”的定义是什么?有分隔符吗?如果您发布示例测试用例,将对每个人都有帮助。
  • 添加一个具体的例子——输入和输出。

标签: java string integer contains


【解决方案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; 

}

【讨论】:

    【解决方案2】:

    你可以用一个模式来做:

    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()));
        }
    }
    

    【讨论】:

      【解决方案3】:

      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
      

      但我的程序要求字符串中没有其他内容。

      如果您有兴趣检查整个字符串(不仅仅是其中的一部分)是否是两个数字,那么您可以简单地使用

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

      【讨论】:

        猜你喜欢
        • 2012-11-06
        • 2013-08-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-04
        相关资源
        最近更新 更多