欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

 

相关标签: java 案例