1 题目要求
输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。
输入格式:
输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。
输出格式:
在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。
2 样例
输入样例:
Tomcat is a male ccatat
cat
输出样例:
Tom is a male
3 分析
(1) 思路1 :使用子串subStr 对字符串进行分割,分割得到的剩余串为结果,——
但其实这样是有问题的,
(2)问题在,如样例所示,ccatcat最终消失,说明在去掉ccatat中间的cat后,ccatat,没有停止直接输出,而是继续删除剩余的c at。所以应当设置一个循环,每次剔除cat后,继续检查剩余串是否包含cat,直到剩余串不再包含cat为止。
(3)有别于(1)中提出的方法,可以使用替换函数,将子串替换为""
(4)注意:本题没有要求 输出时剔除两侧的空格
4 代码
方法1 使用split(subStr+"+")
import java.util.Scanner;
class Main
{
public static String delSubString(String str,String subStr)
{
//str=str.trim();
String[] s=str.split(subStr+"+");
String ss=new String();
// string s=str.replaceAll(subStr,"");
for(int i=0;i<s.length;i++)
{
// System.out.println(s[i]);
ss=ss+s[i];
}
// System.out.print(s);
return ss;
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
String subStr=sc.nextLine();
while(str.contains(subStr))
{
str=delSubString(str,subStr);
}
System.out.println(str);
}
}
结果最长嵌套超时
方法2:使用replace(subStr,"")
import java.util.Scanner;
class Main
{
public static String delSubString(String str,String subStr)
{
String s=str.replace(subStr,"");
return s;
}
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
String subStr=sc.nextLine();
while(str.contains(subStr))
{
str=delSubString(str,subStr);
}
System.out.println(str);
}
}
5 总结
String 函数的灵活使用
str.split(正则表达式)
str.replace(subStr,newSubStr)
str.contains(subStr)