如何在java中的字符串的某些部分使用正则表达式?

时间:2015-07-17 18:06:04

标签: java regex

我想在java中的字符串的某些部分使用正则表达式,

在下面的字符串中,只有emp-id-<dynamic empID>project对所有字符串保持相同。

Case1:  project/emp-id1545/ID-JHKDKHENNDHJSJ

Case 2: project/**dep**/emp-id8545/ID-GHFRDEEDE

我的情况有时会出现deptemp字符串,或Case 1之后没有像project这样的值。

如何从上面的字符串中仅过滤emp-id-<dynamic empID>,以便使用案例1和案例2?

1 个答案:

答案 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

Java 8

鉴于您的数据表明该字符&#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

非正则表达式或Java 8

仍在使用&#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