我想在java中的字符串的某些部分使用正则表达式,
在下面的字符串中,只有emp-id-<dynamic empID>
和project
对所有字符串保持相同。
Case1: project/emp-id1545/ID-JHKDKHENNDHJSJ
Case 2: project/**dep**/emp-id8545/ID-GHFRDEEDE
我的情况有时会出现dep
,temp
字符串,或Case 1
之后没有像project
这样的值。
如何从上面的字符串中仅过滤emp-id-<dynamic empID>
,以便使用案例1和案例2?
答案 0 :(得分:1)
您可以通过多种方式完成此任务
模式
"emp-id\\d+"
应该达到你想要的两种情况。模式匹配&#34; emp-id&#34;加上1位或更多位数(\\d+
)。
public static void main(String[] args) throws Exception {
String case1 = "project/emp-id1545/ID-JHKDKHENNDHJSJ";
String case2 = "project/**dep**/emp-id8545/ID-GHFRDEEDE";
Matcher matcher = Pattern.compile("emp-id\\d+").matcher(case1);
// Changed from while to if cause we're only going to get the first match
if (matcher.find()) {
System.out.println(matcher.group());
}
matcher = Pattern.compile("emp-id\\d+").matcher(case2);
// Changed from while to if cause we're only going to get the first match
if (matcher.find()) {
System.out.println(matcher.group());
}
}
结果:
emp-id1545
emp-id8545
鉴于您的数据表明该字符&#34; /&#34;是一个分隔符。您还可以使用String.split()
和Stream.filter()
(Java 8)来查找字符串。
public static void main(String[] args) throws Exception {
String case1 = "project/emp-id1545/ID-JHKDKHENNDHJSJ";
String case2 = "project/**dep**/emp-id8545/ID-GHFRDEEDE";
System.out.println(Arrays.stream(case1.split("/")).filter(s -> s.startsWith("emp-id")).findFirst().get());
System.out.println(Arrays.stream(case2.split("/")).filter(s -> s.startsWith("emp-id")).findFirst().get());
}
结果:
emp-id1545
emp-id8545
仍在使用&#34; /&#34;分隔符和&#34; emp-id&#34;您可以使用String.indexOf()
和String.substring()
来提取您正在寻找的字符串。
public static void main(String[] args) throws Exception {
String case1 = "project/emp-id1545/ID-JHKDKHENNDHJSJ";
String case2 = "project/**dep**/emp-id8545/ID-GHFRDEEDE";
int index = case1.indexOf("emp-id");
System.out.println(case1.substring(index, case1.indexOf("/", index)));
index = case2.indexOf("emp-id");
System.out.println(case2.substring(index, case2.indexOf("/", index)));
}
结果:
emp-id1545
emp-id8545