题目描述
完美世界现在正在运营DOTA2游戏,由于一些政策法规的需要对于游戏的一些聊天关键字进行屏蔽,玩家发送的聊天信息经过服务器的过滤再广播给需要接收的玩家,这样就可以将其中一些不需要显示的字给替换成*.
输入格式
第一行正整数N,表示屏蔽字库的条目数量,
接下来N行输入屏蔽字库的每个条目.
接下来的一行正整数M,表示样本的条目数量
接下来的M行输入样本的每个条目。
样本的每个条目的最长长度小于1024
其中样本的最小字符长度>屏蔽字的最大字符长度
屏蔽条目的时候需要先处理屏蔽字条目长度最长的,最后处理屏幕字条目长度最小的。
测试格式
输入:一行文字
输出:将文字需要屏蔽的字改成*以后,输出文字。
输入样例
3
完美
完美世界
DOTA2
1
完美世界代理的DOTA2即将公测。
测试样例
********代理的*****即将公测
java源代码:
package org.sub.zyb;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Sub1 {
public static void main(String[] args) {
//输入条目个数和测试条目
Input input = new Input();
int n = input.getInt();
String[] bar = new String[n];
for(int i=0;i<n;i++){
bar[i] = input.getString();
}
//将输入的条目字符串降序排列,这样可以保证先替换掉比较长的字符,否则会出现“**中国代理的”这种情况
Operate.sort(bar);
//输入样本数目和测试样本
int m = input.getInt();
String[] sam = new String[m];
for(int i=0;i<m;i++){
sam[i] = input.getString();
}
//屏蔽掉sam数组测试条目中的敏感字符
Operate.replace(bar, sam);
//输出屏蔽后的字符
for(int i=0;i<m;i++){
System.out.println(sam[i]);
}
}
}
/*
信息输入类
*/
class Input{
private BufferedReader buf = null;
public Input(){
this.buf = new BufferedReader(new InputStreamReader(System.in));
}
// 获取输入的字符串
public String getString(){
String temp = null;
try {
temp = this.buf.readLine();
} catch (IOException e) {
e.printStackTrace();
}
return temp;
}
// 获取输入的整数
public int getInt(){
int temp = 0;
String str = null;
boolean flag = true;
while(flag){
str = this.getString();
if(str.matches("^\\d+$")){
temp = Integer.parseInt(str);
flag = false;
}else{
System.out.println("Input error,please input an integer:");
}
}
return temp;
}
}
/*
对输入的信息进行操作的类
*/
class Operate{
//排序方法,先将String数组转化为StringBuffer数组,再根据字符串长度降序排列,这样可以降低开销,最后再转化成String数组
public static void sort(String[] arr){
StringBuffer[] brr = new StringBuffer[arr.length];
for(int i=0;i<arr.length;i++){
brr[i] = new StringBuffer(arr[i]);
}
for(int i=0;i<brr.length-1;i++){
for(int j=i+1;j<brr.length;j++){
if(brr[i].length()<brr[j].length()){
StringBuffer temp = brr[i];
brr[i] = brr[j];
brr[j] = temp;
}
}
}
for(int i=0;i<arr.length;i++){
arr[i] = brr[i].toString();
}
}
//替换字符串方法,替换掉测试样本中的敏感字符
public static void replace(String[] bar,String[] sam){
for(int i=0;i<sam.length;i++){
for(int j=0;j<bar.length;j++){
if(sam[i].contains(bar[j])){
StringBuffer replaced = new StringBuffer();
for(int k=0;k<bar[j].length();k++){
replaced.append("*");
}
sam[i] = sam[i].replace(bar[j], replaced.toString());
}
}
}
}
}