基于主程序/子程序风格的kiwc实现

/**
 * 
 */
package com.jason.kwic.mainSubroutine;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

/**
 * 基于主程序/子程序风格的kiwc实现
 * @author jasonzhang
 *
 */
public class MainSubroutine {

	private ArrayList<ArrayList<String>> linelist = new ArrayList<ArrayList<String>>();
	private ArrayList<String> shiftedLineList = new ArrayList<String>();

	public static void main(String[] args) throws IOException {
		MainSubroutine main = new MainSubroutine();
		main.input();
		main.shift();
		main.alphabetizer();
		main.output();
	}

	private void input() throws IOException {
		File infile = new File("d:\\temp\\mykwic_in.txt");
		Scanner sc = new Scanner(infile);
		String tempLine = null;
		System.out.println("input is");
		while (sc.hasNextLine()) {
			tempLine = sc.nextLine();
			System.out.println(tempLine);
			this.linelist.add(this.lineSplitWord(tempLine));
		}
	}

	private void shift() {
		for (ArrayList<String> wordLine : this.linelist) {
			this.shiftWordLine(wordLine);
		}
	}

	private void alphabetizer() {
		//按字母表排序
        Collections.sort(this.shiftedLineList, new AlphaabetizerComparator());
	}

	private void output() {
		System.out.println("output is");
		for (String line : this.shiftedLineList) {
			System.out.println(line);
		}
	}

	private ArrayList<String> lineSplitWord(String line) {
		ArrayList<String> wordList = new ArrayList<String>();
		String word = "";
        int i = 0;
        while(i < line.length()){
            if(line.charAt(i) != ‘ ‘){
                word += line.charAt(i);
            }
            else{
            	wordList.add(word);
                word = "";
            }
            i++;
        }
        if (word.length() > 0) {
        	wordList.add(word);
        }
		return wordList;
	}

	private void shiftWordLine(ArrayList<String> wordLine) {
		StringBuilder tempLine = new StringBuilder();
		int wordNums = wordLine.size();
		//System.out.println("shifed is");
		for (int i=0; i<wordNums; i++) {
			for (int j=(wordNums - 1 -i); j < wordNums; j++) {
				tempLine.append(wordLine.get(j)).append(‘ ‘);
			}
			for (int k=0; k<(wordNums - 1 -i); k++) {
				if (k != (wordNums - i - 2)) {
					tempLine.append(wordLine.get(k)).append(‘ ‘);
				} else {
					tempLine.append(wordLine.get(k));
				}
			}
			//System.out.println(tempLine.toString());
			this.shiftedLineList.add(tempLine.toString());
			tempLine.delete(0, tempLine.length());
		}
	}

	private class AlphaabetizerComparator implements Comparator<String> {

		@Override
		public int compare(String o1, String o2) {
			if (o1 == null || o2 == null) {
	            throw new NullPointerException();
	        }
			int compareValue = 0;
			char o1FirstCharacter = o1.charAt(0);
			char o2FirstCharacter = o2.charAt(0);
			if(this.isLetter(o1FirstCharacter) && this.isLetter(o2FirstCharacter)) {
				//如果是小写的字母的值,则转成对应的大写的字母的值
				o1FirstCharacter = this.toUpperCase(o1FirstCharacter);
				o2FirstCharacter = this.toUpperCase(o2FirstCharacter);
				compareValue = o1FirstCharacter - o2FirstCharacter;
			} else {
				throw new RuntimeException("必须是字母");
			}
			return compareValue;
		}

		private boolean isLetter(char c) {
			return (c >= 65 && c <= 90) || (c >= 97 && c <= 122);
		}

		private char toUpperCase(char c) {
			if (Character.isLowerCase(c)) {
				return Character.toUpperCase(c);
			}
			return c;
		}
    
    }
}

这种风格基本上就是一个类实现所有的事情。

时间: 2024-11-05 23:26:36

基于主程序/子程序风格的kiwc实现的相关文章

《Essential C++》读书笔记 之 基于对象编程风格

<Essential C++>读书笔记 之 基于对象编程风格 2014-07-13 4.1 如何实现一个class 4.2 什么是Constructors(构造函数)和Destructors(析构函数) 4.3 何谓mutable(可变)和const(不变) 4.4 什么是this指针 4.5 Static Class Member(静态的类成员) 4.6 打造一个Iterator Class 4.7 合作关系必须建立在友谊的基础上 4.8 实现一个copy assignment operat

软件体系结构【1】 调用返回风格

请允许我在描述调用返回风格之前,先讲一个短小的故事.调用返回风格是在程序发展的道路上逐渐演变而来的.最初的程序设计风格,叫非结构化程序设计,是历史上最早的能够创造图灵完备算法的程序设计模式. 一个使用非结构化语言的程序中,按照顺序执行代码.它中间不存在过程,虽然可以在语句中调用子程序,但是和过程不同,这里的子程序甚至没有参数传递,还可能有好几个入口和出口,可以随意的直接跳入跳出.这些仅仅是为了反复调用一段程序提供方便,它在程序设计初期也确实提供了一些方便.然而,由于这个模式难以被编写者以外的人理

130242014023+李甘露美+第3次实验

一.实验目的 1.理解不同体系结构风格的具体内涵. 2.学习体系结构风格的具体实践. 二.实验环境 硬件: 联想笔记本电脑 软件:Java或任何一种自己熟悉的语言 三.实验内容 "上下文关键字"KWIC(Key Word in Context,文本中的关键字)检索系统接受有序的行集合:每一行是单词的有序集合:每一个单词又是字母的有序集合.通过重复地删除航中第一个单词,并把它插入行尾,每一行可以被"循环地移动".KWIC检索系统以字母表的顺序输出一个所有行循环移动的列

130242014059-陈敬龙-第三次实验

一.实验目的 1.理解不同体系结构风格的具体内涵. 2.学习体系结构风格的具体实践. 二.实验环境 硬件: (依据具体情况填写) 软件:Java或任何一种自己熟悉的语言 三.实验内容 "上下文关键字"KWIC(Key Word in Context,文本中的关键字)检索系统接受有序的行集合:每一行是单词的有序集合:每一个单词又是字母的有序集合.通过重复地删除航中第一个单词,并把它插入行尾,每一行可以被"循环地移动".KWIC检索系统以字母表的顺序输出一个所有行循环移

上下文关键字

共享数据的主程序/子程序风格: 1.体系结构图: 2.简述体系结构各部件的主要功能,实现思想. 输入:从文件读入文章,按行存入集合. 循环移动:访问行集合,循环移动后更新集合. 排序:访问行集合,排序后更新集合. 输出:以输出流形式输出行集合. 3.写出主要的代码 lineList = [] def input(): fr = open(r"D:\Desktop\KWIC\inputText.txt") print('-----Input-----') for line in fr.r

SpringMVC+Json构建基于Restful风格的应用(转)

一.spring 版本:spring-framework-3.2.7.RELEASE 二.所需其它Jar包: 三.主要代码: web.xml [java] view plaincopy <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org

SpringMVC+Json构建基于Restful风格的应用

一.spring 版本:spring-framework-3.2.7.RELEASE 二.所需其它Jar包: 三.主要代码: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

架构风格

传统的架构风格 依据David Calvert在1996年给出了一份架构风格/模式的清单,架构风格包括了: 数据流系统——批处理,管道-过滤器. 调用-返回系统——主程序和子程序,面向对象系统,分层. 独立组件——通信过程,事件系统. 虚拟机——解释器,基于规则的系统. 以数据为中心的系统(仓库)——数据库,超文本系统,黑板. 数据流风格 面向数据的架构风格,软件的处理粒度是赤裸裸的“数据”,而不需对数据进行任何的“包装”. 批处理序列 组件为一系列固定顺序的计算单元(独立程序),组件间只通过数

全检体系结构风格浅谈

在所有对于软件体系结构的定义中,我认为最有代表性的就是Hayes Roth所提出的:“认为软件体系结构是一个抽象的系统规范,主要包括用其行为来描述的功能构件和构件之间的相互连接.接口和关系.”那么,什么是软件体系结构风格呢?所谓软件体系结构风格是指:“描述某一特定应用领域中系统组织方式的惯用模式.”它反映了领域中众多系统所共有的结构和语义特性,并指导如何将各个模块和子系统有效地组织成一个完整的系统.按这种方式理解,软件体系结构风格是指:“定义了用于描述系统的术语表和一组指导构件系统的规则.” 软