要求:
1. 一个线程负责随机产生需要清洗的数据(带敏感词的一句话)
2. 一个线程负责处理这些数据(将其中的敏感词替换为*号)
3. 生产者和消费者都可以有多个
package cc.lanou;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;
public class Rinse {
//使用ArrayBlockingQueue实现生产者消费者
static ArrayBlockingQueue<String> dishes = new ArrayBlockingQueue<String>(10);
//清洗后存入的集合
static List<String> list = new ArrayList<String>();
//要清洗的字符串数据
static String[] strs = { "你不要脸", "不爱钱", "爱国键盘侠" };
public static void main(String[] args) throws InterruptedException {
Begin begin = new Begin();
Finish finish = new Finish();
Thread begin1 = new Thread(begin);
Thread finish1 = new Thread(finish);
begin1.start();//开启线程
finish1.start();
begin1.join();//等待子线程的结束
finish1.join();
for (String list : list) {//打印清洗后的数据
System.out.println("清洗后的数据:" + list);
}
}
//生产者
static class Begin implements Runnable {
@Override
public void run() {
for (int i = 0; i < strs.length; i++) {
try {
if (!strs[i].equals(null)) {
dishes.put(strs[i]);
System.out.println("新的的数据已到达");
TimeUnit.SECONDS.sleep(1);
} else {
System.out.println("没有了");
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//消费者
static class Finish implements Runnable {
@Override
public void run() {
for (int i = 0; i < strs.length; i++) {
String str;
try {
str = dishes.take();
list.add(replaceKeywords(str));
System.out.println("已清洗");
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
//调用替换方法,过滤的敏感词
public static String replaceKeywords(String message) {
String result = message;
String[] keywords = { "麻痹","妈逼","好的"};
for (String keyword : keywords) {
String content = "";
for (int i = 0; i < keyword.length(); i++) {
content += "*";
}
result = result.replace(keyword, content);
}
return result;
}
}