题目解析
将给定文本,从左到右依次处理每一个违禁词
如果出现违禁词的数量大于等于阈值: 则输出出现违禁词的数量,以及He Xie Ni Quan Jia!
否则出现违禁词的数量小于阈值: 则输出替换后的文本
解题思路
可以利用字符串替换先将违禁词统一替换成一个文本中不会出现的词,然后边替换违禁词边统计个数。
最后判断违禁词的个数
输出指定的内容即可
如果小于的话,则最后再将替换中间词替换成指定的<censored>即可
代码
import java.io.*;
import java.util.*;
public class Main
{
public static void main(String[] args)
{
int n = sc.nextInt();
String shu[] = new String[n + 10]; // 统计违禁词
for (int i = 1; i <= n; i++)
shu[i] = sc.next();
int k = sc.nextInt(); // 输入文本
sc.nextLine();
String replace = "-__-"; // 违禁词替换中间词
int replaceLen = replace.length(); // 违禁词替换中间词的长度
String replaceTo = "<censored>"; // 违禁词须替换的词,也就是最后将替换中间词替换成该次
StringBuilder t = new StringBuilder(sc.nextLine());
int ans = 0;
for (int i = 1; i <= n; i++)
{
int len = shu[i].length(); // 当前违禁词的长度
int start = 0; // 替换位置的起始位置
while (start != -1)
{
start = t.indexOf(shu[i]); // 去找替换的起始位置
if (start != -1) // 如果还存在当前的违禁词
{
t = t.replace(start, start + len, replace); // 将当前违禁词替换成中间词
ans++; // 违禁词的个数+
}
}
}
if (ans >= k) // 如果违禁词的数量大于等于阈值
{
out.println(ans);
out.println("He Xie Ni Quan Jia!");
} else // 违禁词的数量小于阈值
{
int start = 0; // 替换位置的起始位置
while (start != -1)
{
start = t.indexOf(replace); // 去找替换的起始位置
if (start != -1) // 如果还有中间词可以替换
t = t.replace(start, start + replaceLen, replaceTo); // 将中间词替换成替换词
}
out.println(t);
}
out.flush();
out.close();
}
static Scanner sc = new Scanner(System.in);
static PrintWriter out = new PrintWriter(System.out);
}