用asterick替换带有开头和结尾的String忽略当前字符串中的括号

时间:2012-10-18 04:30:08

标签: java replace case-insensitive

如何获得所需的输出?

输入字符串:

 " software Company(1920 of 1897 ) IBM region(sb2). region(sb3)

要搜索的字词 -

"software company(1920)"

输出

software Company(1920) IBM.IBM region(sb2)。地区(第3页)

简而言之,我必须找到一个短语并用开头和结尾的星号(*)替换相同的短语,忽略案例和匹配精确的世界

5 个答案:

答案 0 :(得分:1)

您可以按照以下方式执行此操作:

    String str = "software Company (1920) IBM. software company (1920) TCS. SOftware Company (1920) HSBC. SOFTWARE COMPANY (1920) INFOSYS";

    Pattern p = Pattern.compile("(?i)(software company \\(1920\\))");
    Matcher matcher = p.matcher(str);
    while(matcher.find()) {
        String curStr = matcher.group();
        str = str.replace(curStr,"*"+curStr+"*");
    }
    System.out.println(str);

答案 1 :(得分:1)

使用BackReference

尝试此操作
     String inputString = " software Company(1920) IBM. software company (1920)"+
           "TCS. SOftware Company (1920) HSBC. SOFTWARE COMPANY (1920) INFOSYS ";
     String patternStr = "([[a-zA-Z]{2}ftware Company\\([0-9]{4}\\)]{24})";
     Pattern pattern = Pattern.compile(patternStr );
     Matcher matcher = pattern.matcher(inputString);
     System.out.println(matcher.replaceAll("*$1*"));

答案 2 :(得分:0)

我只有几年的java经验,所以有人请纠正我,如果我错了,但你不能使用它:假设你的输入字符串是String input然后使用{{ 1}}。获得索引后,您可以简单地使用input.indexOf([words to be searched])方法,将总文本剪切成一堆小块,添加星号,然后将所有内容连接在一起。

答案 3 :(得分:0)

答案 4 :(得分:0)

编译模式时使用CASE_INSENSITIVE功能

String input = "Software company (1988)";
    Pattern pattern = Pattern.compile("software company \\([1-9][0-9]{3}\\)",Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(input);
    if (matcher.matches())
    {
            System.out.println("*" + matcher.group(0) + "*");
    }

group(0)返回整个匹配的模式。