Java案例:合并编辑找出的问题句子
程序员文章站
2022-07-10 17:07:12
...
【题目描述】
为了提高文章质量,每一篇文章(假设全都是英文)都会有m名编辑进行审核,每个编辑独立工作,会把有问题的句子通过下标记录下来,比如[1,10],1表示病句的第一个字符,10表示病句的最后一个字符。也就是从1到10这10个字符组成的句子,是有问题的。
现在需要把多名编辑有问题的句子合并起来,送给总编辑进行审核,比如编辑A指出的病句是[1,10],[32,45];编辑B指出的病句是[5,16],[78,94],那么[1,10]和[5,16]是有交叉的,可以合并成[1,16],[32,45],[78,94]。最后得到的结果要按升序进行排列。
【代码】
package com.xzw.test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* 输入:编辑数量m,之后每行是每个编辑的标记的下标集合,
* 第一个和最后一个下标用英文逗号分隔,每组下标之间用分号分隔。
* 输出:合并后的下标集合,第一个和最后一个下标用英文逗号分隔,每组
* 下标之间用分号分隔。返回结果是从小到大的递增排序。
* 示例:
* 输入:3
* 1,10;32,45
* 78,94;5,16
* 80,100;200,220;16,32
* 输出:1,45;78,100;200,220
* @author xzw
*
*/
public class Editor {
/**
* 主函数
* @param args
*/
public static void main(String[] args) {
new Editor().input(3, new String[]{"1,10;32,45","78,94;5,16","80,100;200,220;16,32"});
}
/**
* 输入方法
* @param editorsCount 编辑的数量
* @param questionSentence 每个编辑标记的下标集合
*/
public void input(int editorsCount, String... questionSentence){
//定义一个列表,用于存放分割后的编辑找出的问题下标
List<String> list = new ArrayList<String>();
//分隔每个编辑找出的问题下标并存到列表中
for (int i = 0; i < questionSentence.length; i++) {
for (int j = 0; j < questionSentence[i].split(";").length; j++) {
list.add(questionSentence[i].split(";")[j]);
}
}
//将编辑找出的有包含或者重叠的部分进行整合操作
index: for (int i = 0; i < list.size(); i++) {
for (int j = i + 1; j < list.size(); j++) {
if (Integer.parseInt(list.get(j).split(",")[0]) <= Integer.parseInt(list.get(i).split(",")[1]) && Integer.parseInt(list.get(i).split(",")[1]) <= Integer.parseInt(list.get(j).split(",")[1])) {
if (Integer.parseInt(list.get(i).split(",")[0]) <= Integer.parseInt(list.get(j).split(",")[0])) {
Collections.replaceAll(list, list.get(i), list.get(i).split(",")[0] + "," + list.get(j).split(",")[1]);
removeElement(list, list.get(j));
i--;
continue index;
} else {
Collections.replaceAll(list, list.get(i), list.get(j).split(",")[0] + "," + list.get(j).split(",")[1]);
removeElement(list, list.get(j));
i--;
continue index;
}
}
}
}
//将结果从小到大排序
for (int i = 0; i < list.size() - 1; i++) {
for (int j = 0; j < list.size() - (i + 1); j++) {
if (Integer.parseInt(list.get(j).split(",")[0]) > Integer.parseInt(list.get(j + 1).split(",")[0])) {
String value = list.get(j);
Collections.replaceAll(list, list.get(j), list.get(j + 1));
Collections.replaceAll(list, list.get(j + 1), value);
}
}
}
//遍历输出结果
for (int i = 0; i < list.size(); i++) {
if (i == list.size() - 1) {
System.out.println(list.get(i));
} else {
System.out.print(list.get(i) + ";");
}
}
}
/**
* 删除列表中指定的元素
* @param list 删除的列表
* @param target 被删除的值
*/
public void removeElement(List<String> list, String target){
for(int i = list.size() - 1; i >= 0; i--){
String item = list.get(i);
if(target.equals(item)){
list.remove(item);
}
}
}
}
【输出结果】
1,45;78,100;200,220
推荐阅读