簡體   English   中英

字符串僅包含2個整數-Java

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM