基础编程题目集—— 7-29 删除字符串中的子串

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)

你可能感兴趣的:(;PTA,Java,ACM)