开发者

Java regex case insensitivity not working

I'm trying to remove some words in a string using regex using below program. Its removing properly but its considering only case sensitive. How to make it as case insensitive. I kept (?1) in replaceAll method but it didn't work.

package com.test.java;

public class RemoveWords {

    public static void main(String args[])
    {

        // assign some words to string

        String sample ="what Is the latest news today in Europe? is there any thing special or everything is common.";

            System.out.print(sample.replaceAll("( is | the |in | any )(?i)"," "));
    }
}

OUTPUT:

what Is latest news today  E开发者_运维问答urope? there thing special or everything common.


You need to place the (?i) before the part of the pattern that you want to make case insensitive:

System.out.print(sample.replaceAll("(?i)\\b(?:is|the|in|any)\\b"," "));
                                    ^^^^

See it

I've replaced spaces around the keywords to be removed with word boundary (\\b). The problem comes because there may be two keywords one after another separated by just one space.

If you want to delete the keywords only if they are surrounded by space, then you can use positive lookahead and lookbehind as:

(?i)(?<= )(is|the|in|any)(?= )

See it


I don't think you can specify case insensitive with the quick replace. Try a pattern instead. i.e:

package com.test.java;

public class RemoveWords {

public static void main(String args[]) {
  // assaign some words to string
  String sample ="what Is the latest news today in Europe? is there any thing special or everything is common.";
  String regex = "( is | the |in | any )"
  System.out.print
  (
    Pattern.compile(regex, Pattern.CASE_INSENSITIVE).matcher(sample).replaceAll("")
  );
 }
}


change is to [iI][sS]

sample.replaceAll("( [iI][sS] ...
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜