使用Java正則表示式查詢使用者輸入的資料型別


在Java程式設計中,確定使用者輸入的資訊型別是一個常見任務,尤其是在建立需要資料驗證或處理的應用程式時。正則表示式(或regex)是識別字符串中模式(包括資料型別)的有效工具。本文將探討使用Java正則表示式查詢使用者輸入資料型別的不同方法。

語法

Java中正則表示式的語法基於`java.util.regex`包。它提供了`Pattern`和`Matcher`等類來處理正則表示式模式並執行匹配操作。

語法解釋

要在Java中使用正則表示式,我們首先需要使用`Pattern`類建立一個正則表示式模式。該模式表示我們需要匹配的所需模式。我們將使用正則表示式中不同的預定義字元和運算子來定義模式。

定義模式後,我們透過在模式上呼叫`matcher()`方法來建立一個`Matcher`物件。`Matcher`允許我們將模式應用於特定的輸入字串並執行匹配操作。

方法一

演算法

  • 為每種資料型別(例如整數、浮點數、字串等)建立一個正則表示式模式。

  • 使用`Pattern`類編譯正則表示式模式。

  • 使用已編譯的模式和使用者輸入字串建立一個`Matcher`物件。

  • 使用`Matcher`類的`matches()`方法檢查輸入字串是否與特定資料型別的模式匹配。

  • 對每種資料型別模式重複此過程,直到找到匹配項。

示例

import java.util.regex.*;

public class DataTypeFinder {
   public static void main(String[] args) {
      String userInput = "42.5"; // Example user input
        
      // Define regex patterns for data types
      String integerPattern = "\d+";
      String floatPattern = "\d+\.\d+";
      String stringPattern = "[a-zA-Z]+";

      // Compile the patterns
      Pattern integerRegex = Pattern.compile(integerPattern);
      Pattern floatRegex = Pattern.compile(floatPattern);
      Pattern stringRegex = Pattern.compile(stringPattern);

      // Create Matcher objects for each pattern
      Matcher integerMatcher = integerRegex.matcher(userInput);
      Matcher floatMatcher = floatRegex.matcher(userInput);
      Matcher stringMatcher = stringRegex.matcher(userInput);

      // Check for matches
      if (integerMatcher.matches()) {
         System.out.println("Input is an integer.");
      } else if (floatMatcher.matches()) {
         System.out.println("Input is a float.");
      } else if (stringMatcher.matches()) {
         System.out.println("Input is a string.");
      } else {
         System.out.println("Unable to determine the data type.");
      }
   }
}

輸出

Input is a float.

解釋

在這種方法中,我們為要識別的每種資料型別(整數、浮點數和字串)建立單獨的正則表示式模式。這些模式使用`Pattern`類進行編譯。

然後我們為每個模式比較`Matcher`物件,並將使用者輸入字串傳遞給每個匹配器。我們使用`matches()`方法來檢查輸入字串是否與特定資料型別的模式匹配。

如果找到匹配項,我們列印相應的資料型別。否則,如果找不到匹配項,我們列印一條錯誤訊息,指示無法確定資料型別。

方法二

演算法

  • 建立一個單個正則表示式模式,使用OR(|)運算子組合所有資料型別的模式。

  • 使用`Pattern`類編譯模式。

  • 使用已編譯的模式和使用者輸入字串建立一個`Matcher`物件。

  • 使用`Matcher`類的`matches()`方法檢查輸入字串是否與任何資料型別模式匹配。

示例

import java.util.regex.*;

public class DataTypeFinder {
   public static void main(String[] args) {
      String userInput = "42.5"; // Example user input
        
      // Define regex pattern for all data types
      String dataTypePattern = "\d+|\d+\.\d+|[a-zA-Z]+";

      // Compile the pattern
      Pattern regex = Pattern.compile(dataTypePattern);

      // Create a Matcher object
      Matcher matcher = regex.matcher(userInput);

      // Check for matches
      if (matcher.matches()) {
         System.out.println("Input is of a recognized data type.");
      } else {
         System.out.println("Unable to determine the data type.");
      }
   }
}

輸出

Input is of a recognized data type.

解釋

在這種方法中,我們建立單個正則表示式模式,使用OR(|)運算子組合所有資料型別的模式。這允許我們將任何模式與使用者輸入字串進行匹配。

我們使用`Pattern`類編譯模式,並使用已編譯的模式和使用者輸入字串建立一個`Matcher`物件。然後,我們使用`Matcher`類的`matches()`方法檢查輸入字串是否與任何資料型別模式匹配。

如果找到匹配項,我們列印一條訊息,指示輸入是已知資料型別。否則,如果找不到匹配項,我們列印一條錯誤訊息,指示無法確定資料型別。

方法三

演算法

  • 建立一個正則表示式模式,檢查與每種資料型別相關的特定模式。

  • 使用`Pattern`類編譯模式。

  • 使用`Matcher`類的`find()`方法查詢使用者輸入字串中是否存在任何資料型別模式。

示例

import java.util.regex.*;

public class DataTypeFinder {
   public static void main(String[] args) {
      String userInput = "42.5"; // Example user input
        
      // Define regex pattern for each data type
      String integerPattern = "\d+";
      String floatPattern = "\d+\.\d+";
      String stringPattern = "[a-zA-Z]+";

      // Compile the patterns
      Pattern integerRegex = Pattern.compile(integerPattern);
      Pattern floatRegex = Pattern.compile(floatPattern);
      Pattern stringRegex = Pattern.compile(stringPattern);

      // Create Matcher objects for each pattern
      Matcher integerMatcher = integerRegex.matcher(userInput);
      Matcher floatMatcher = floatRegex.matcher(userInput);
      Matcher stringMatcher = stringRegex.matcher(userInput);

      // Check for matches
      if (integerMatcher.find()) {
         System.out.println("Input contains an integer.");
      }
      if (floatMatcher.find()) {
         System.out.println("Input contains a float.");
      }
      if (stringMatcher.find()) {
         System.out.println("Input contains a string.");
      }
      if (!integerMatcher.find() && !floatMatcher.find() && !stringMatcher.find()) {
         System.out.println("Unable to determine the data type.");
      }
   }
}

輸出

Input contains an integer.
Input contains a float.

解釋

在這種方法中,我們為每種資料型別建立單獨的正則表示式模式,並使用`Pattern`類對其進行編譯。

然後我們為每個模式比較`Matcher`物件,並將使用者輸入字串傳遞給每個匹配器。與使用`matches()`方法不同,我們使用`Matcher`類的`find()`方法來查詢輸入字串中是否存在任何資料型別模式。

如果找到匹配項,我們列印一條訊息,指示輸入包含相應的資料型別。如果找不到任何資料型別模式的匹配項,我們列印一條錯誤訊息,指示無法確定資料型別。

方法四

演算法

  • 建立一個正則表示式模式,檢查與每種資料型別相關的特定模式。

  • 使用`Pattern`類編譯模式。

  • 使用`Matcher`類的`find()`方法查詢使用者輸入字串中是否存在每種資料型別模式。

  • 將找到的資料型別儲存在一個變數中,以便進一步處理。

示例

import java.util.regex.*;

public class DataTypeFinder {
   public static void main(String[] args) {
      String userInput = "42.5"; // Example user input
        
      // Define regex pattern for each data type
      String integerPattern = "\d+";
      String floatPattern = "\d+\.\d+";
      String stringPattern = "[a-zA-Z]+";

      // Compile the patterns
      Pattern integerRegex = Pattern.compile(integerPattern);
      Pattern floatRegex = Pattern.compile(floatPattern);
      Pattern stringRegex = Pattern.compile(stringPattern);

      // Create Matcher objects for each pattern
      Matcher integerMatcher = integerRegex.matcher(userInput);
      Matcher floatMatcher = floatRegex.matcher(userInput);
      Matcher stringMatcher = stringRegex.matcher(userInput);

      // Check for matches and store the found data type
      String dataType = "";
      if (integerMatcher.find()) {
         dataType = "integer";
      }
      if (floatMatcher.find()) {
         dataType = "float";
      }
      if (stringMatcher.find()) {
         dataType = "string";
      }

      // Process the found data type
      if (!dataType.isEmpty()) {
         System.out.println("Input is of data type: " + dataType);
      } else {
         System.out.println("Unable to determine the data type.");
      }
   }
}

輸出

Input is of data type: float

解釋

在這種方法中,我們為每種資料型別建立單獨的正則表示式模式,並使用`Pattern`類對其進行編譯。

然後我們為每個模式比較`Matcher`物件,並將使用者輸入字串傳遞給每個匹配器。同樣,我們使用`Matcher`類的`find()`方法來查詢輸入字串中是否存在每種資料型別模式。

如果找到匹配項,我們將相應的資料型別儲存在一個名為`dataType`的變數中。處理完所有模式後,我們檢查`dataType`變數是否為空。如果它不為空,我們列印一條訊息,指示找到的資料型別。如果`dataType`變數為空,我們列印一條錯誤訊息,指示無法確定資料型別。

結論

確定使用者輸入的資料型別是許多Java應用程式的重要方面。正則表示式提供了一種強大的方法來識別字符串中的模式並有效地確定資料型別。在本文中,我們探討了使用Java正則表示式查詢使用者輸入資料型別的不同方法。

更新於:2023年7月31日

445 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.