簡體   English   中英

Java中整數的正則表達式

[英]Regular expression for integers in java

在我的項目中,我想在一組數據中搜索一個員工ID(整數)。 如果用戶輸入234作為部分數據,那么我想從234獲取所有雇員的身份。目前,我正在將int轉換為String,然后使用String的contains方法。 我想知道是否有更好的方法。

   String.valueof(employee.getEmployeeId()).contains(EnterNumber) ; 

PS:我發現編寫正則表達式非常困難,對regEx的良好引用會很棒。 提前致謝

正如您所說的,這將起作用:

'^(234).*'

要么

'^'+input+'.*'

如果Id是一個數字 (例如234789920252 ),則可以使用正則表達式

  ^234\d*$

要么

  String pattern = "^" + EnterNumber + "\\d*$";

如果您的任務是找出以“ 234” 開頭的 ID,則最好使用startWith ,不contains

   String.valueof(employee.getEmployeeId()).startsWith(EnterNumber);

您可以按照以下公式實現數值解決方案:

trunc(n / 10^(trunc(log(n, 10)) - trunc(log(m, 10)))) == m

其中n是要測試的數字, m是要匹配的目標數字前綴。 在您的示例中, m = 234

  • trunc(log(n, 10))是位數n 1
  • trunc(log(m, 10))是位數m 1
  • 如果分割n10^(trunc(log(n, 10)) - trunc(log(m, 10)))和截斷它,結果是等於m如果n開頭m

R中用於概念驗證的實現:

starts <- function(n, m) {
    trunc(n / 10^(trunc(log(n, 10)) - trunc(log(m, 10)))) == m
}
> starts(234, 234)
[1] TRUE
> starts(2345, 234)
[1] TRUE
> starts(23, 234)
[1] FALSE
> starts(123, 234)
[1] FALSE
> starts(1, 234)
[1] FALSE
> starts(9898, 234)
[1] FALSE

但這比轉換為String並使用正則表達式進行匹配更好嗎? 那我不知道

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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