在我的项目中,我想在数据集中搜索员工ID(整数)。 如果用户输入234作为部分数据,那么我想获取从234开始的所有员工ID。目前我正在将int转换为String,然后使用String`s contains方法。 我想知道有没有更好的方法...
码
String.valueof(employee.getEmployeeId()).contains(EnterNumber) ;
P.S。 我发现写正则表达式非常困难,很好地参考regEx会很棒。在此先感谢
答案 0 :(得分:0)
正如你所说,这可行:
'^(234).*'
或
'^'+input+'.*'
答案 1 :(得分:0)
如果Id
是号(比如234789920252
),您可以使用正则表达式
^234\d*$
或
String pattern = "^" + EnterNumber + "\\d*$";
如果你的任务是找出开始的标识为“234”,你宁愿使用startWith
,而不是contains
:
String.valueof(employee.getEmployeeId()).startsWith(EnterNumber);
答案 2 :(得分:0)
您可以按照以下公式实施数字解决方案:
trunc(n / 10^(trunc(log(n, 10)) - trunc(log(m, 10)))) == m
其中n
是您要测试的数字,m
是要匹配的目标数字前缀。在您的示例中,m = 234
。
trunc(log(n, 10))
是位数 - n
trunc(log(m, 10))
是位数 - m
n
除以10^(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并使用正则表达式匹配要好吗?那,我不知道......