将'hi'替换为字符串中的'bye'但不包括在java中的匹配但排除'hit'

时间:2016-12-27 06:17:07

标签: java string

喜欢String str="ahibhitc";作为输入,输出就像1告诉字符串中出现的时间hi,abhitc从字符串中删除hi但不包括命中,最后abyebhitc用再见取代所有hi但排除所有在字符串中点击关键字。我试图能够计算出现的喜好,但是因为击中也无法取代喜欢再见。所有我知道的字符串都是不可变的,所以将结果存储在新的字符串中。

public static void main(String[] args) {
     Scanner scn=new Scanner(System.in); 
     String str="ahibhitc";
    // str=scn.nextLine();
     StringBuilder str1= new StringBuilder(str);
     //System.out.println(str1);

     int count=0;
    for(int i=0;i<str.length();i++)
    {
        if(str.charAt(i)=='h'){
            if(str.charAt(i+1)=='i'&& str.charAt(i+2)!='t')
            {
                count++;
            }
        }
    }
    System.out.println(count);
    for(int i=0;i<str.length();i++)
    {
        if(str.charAt(i)=='h'){
            if(str.charAt(i+1)=='i'&& str.charAt(i+2)!='t')
            {
                str1.delete(i, i+2);
                //str1.replace(i, i+2, "");

            }
        }
    }
    System.out.println(str1);
    for(int i=0;i<str.length();i++)
    {
        if(str.charAt(i)=='h'){
            if(str.charAt(i+1)=='i'&& str.charAt(i+2)!='t')
            {

                str1.replace(i, i+2, "bye");

            }
        }
    }
    System.out.println(str1);
  }
}

2 个答案:

答案 0 :(得分:3)

这对你有用:

public static void main(String[] args) {
    String str="ahibhitc";
    System.out.println(str.replaceAll("hi(?!t)", "bye")); // Negative lookahead for "t" after "hi"
}

O / P:

abyebhitc

使用?i限定符使正则表达式不区分大小写。

答案 1 :(得分:1)

完成此操作的最简单方法是首先,用一些占位符字符串(例如“%”)替换所有“hit”的字符串实例(确保这不会出现在@GhostCat所说的输入字符串中)。然后,用“bye”替换所有“hi”字符串。然后用“hit”替换占位符字符串(“%”)。

示例:

   String str="ahibhitc";
   String intermediateString = str.replace("hit","%");
   String result = intermediateString.replace("hi","bye").replace("%","hit");
   System.out.println(result);