JAVA 두 문자열 이 일치 하 는 글자 수 입 니 다.

//한 문자열 에 일치 하 는 다른 문자열 의 글자 수 입 니 다.
//세 가지 일치 방법 비교 사용

public class RangeDifferencerOK {
	/**
	 * 
	 * 〈          〉 〈         ,          ,             .〉
	 * 
	 * @param model
	 * @param input
	 * @return int      ,   @exception/throws [    ]
	 *         [    :                        
	 * @see [ 、 #  、 #  ]
	 */
	public int Comparator(String model, String input) {

		char[] modelByte = model.toCharArray();
		char[] inputByte = input.toCharArray();
		//        
		int j = 0;
		int right = 0;
//		StringBuffer sb = new StringBuffer();
//		StringBuffer sb2 = new StringBuffer();
//		StringBuffer sb3 = new StringBuffer();
		for (int i = 0; i < modelByte.length; i++) {

			int indexNum = ComparatorStr(modelByte[i], inputByte, j);
			// System.out.println("    :"+(char)modelByte[i]+"  :"+indexNum);
			//             
			if (indexNum >= 0) {
				//        
				j = indexNum + 1;
				//    +1
				right++;
//				sb.append((char) modelByte[i]);
//				sb2.append(indexNum + ",");
//				sb3.append(j + ",");
				//               
			}
		}
//
//		System.out.println("    :" + right);
//		System.out.println("    :" + sb);
//		System.out.println("    :" + model);
//		System.out.println("    :" + input);
//		System.out.println("      :" + sb2);
//		System.out.println("      :" + sb3);
		return right;
	}
	
	
	/**
	 * 
	 * 〈          〉 〈         ,          ,             .〉
	 * 
	 * @param model
	 * @param input
	 * @return int      ,   @exception/throws [    ]
	 *         [    :                        
	 * @see [ 、 #  、 #  ]
	 */
	public int Comparator2(String model, String input) {

		char[] modelByte = model.toCharArray();
		char[] inputByte = input.toCharArray();
		int right = 0;
		int modelIi = 0;
		int inputJj = 0;
		for (int i = 0,j=0; i < modelByte.length && j < inputByte.length; i++,j++) {

			if (modelByte[i] == inputByte[j]) {
				right++;
			}else{
				for(int ti =i; ti<modelByte.length; ti++){
					if(modelByte[ti] == inputByte[j]){
						modelIi = ti;
						break;
					}else if(modelByte.length == ti+1){
						i--;
					}
					
				}
				for(int tj =j; tj<inputByte.length; tj++){
					if(inputByte[tj] == modelByte[i]){
						inputJj = tj;
						break;
					}else if(inputByte.length == tj+1){
						inputJj = inputByte.length;
					}
				}
				if(modelIi >= inputJj){
				
						right++;
						j = inputJj;
						
				}else if((modelIi-i) >= (inputJj-j)) {
					right++;
					j = inputJj;
					
				}
			}
			
			
		}
		return right;
	}

	/**
	 * 
	 * 〈          〉 〈         ,          ,             .〉
	 * 
	 * @param model
	 * @param input
	 * @return int      ,   @exception/throws [    ]
	 *         [    :                        
	 * @see [ 、 #  、 #  ]
	 */
	public int Comparator3(String model, String input) {

		char[] modelByte = model.toCharArray();
		char[] inputByte = input.toCharArray();
			int indexNumRe = 0;
		//        
		int j = 0;
		int right = 0;
//		StringBuffer sb = new StringBuffer();
		for (int i = 0; i < modelByte.length; i++) {

			int indexNum = ComparatorStr(modelByte[i], inputByte, j);
			
			//         
				if(i<modelByte.length-1 && indexNum < 0){
				int indexNum2 = ComparatorStr(modelByte[i+1], inputByte, j);
				if (indexNum < indexNum2) {
					//        
					j = indexNum + 1;
						indexNumRe = indexNum;
					//    +1
					right++;
//					sb.append((char) modelByte[i]);
					}else if(indexNum == -1 && indexNum2 == -1){
						indexNum = indexNumRe;
						j = indexNum + 1;
					}
				}else{
					if (indexNum >= 0) {
						j = indexNum + 1;
						indexNumRe = indexNum;
					//    +1
					right++;
//					sb.append((char) modelByte[i]);
				}
			}
		}
		return right;
	}
	
	//    byte             ,      
	public int ComparatorStr(char model, char[] input, int mindex) {
		// String model="013356";

		for (int i = mindex; i < input.length; i++) {
			if (model == input[i]) {
				return i;
			}
		}
		return -1;
	}



	/**
	 * 
	 * 〈    〉
	 * 〈       ,      ,              .     〉
	 * @param source
	 * @return String
	 *      ,   @exception/throws [    ]   [    :                         
	 * @see          [ 、 #  、 #  ]
	 */
	public int coutWord(String source){
		
		//      
		String reg2="[\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\_\\+\\`\\-\\=\\~\\!\\@\\#\\$\\" +
		"%\\^\\&\\*\\\\(\\)\\_\\+\\=\\-\\`\\[\\]\\\\'\\;\\/\\.\\,\\<\\>\\?\\:" +
		"\"\\{\\}\\|\\,\\.\\/\\;\\'\\[\\]\\\\\<\\>\\?\\:\\"\\{\\}\\|\\“\\”\\" +
		"‘\\’\\。\\r+\
+\\t+\\s\\]"; // source = source.replaceAll(reg2, ""); return source.getBytes().length; } /** * * 〈 〉 * 〈 , , 〉 * @param source * @return String * , @exception/throws [ ] [ : * @see [ 、 # 、 # ] */ public String RemovedSymbols(String source){ // String reg2="[\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\_\\+\\`\\-\\=\\~\\!\\@\\#\\$\\" + "%\\^\\&\\*\\\\(\\)\\_\\+\\=\\-\\`\\[\\]\\\\'\\;\\/\\.\\,\\<\\>\\?\\:" + "\"\\{\\}\\|\\,\\.\\/\\;\\'\\[\\]\\\\\<\\>\\?\\:\\"\\{\\}\\|\\“\\”\\" + "‘\\’\\。\\r+\
+\\t+\\s\\]"; // source = source.replaceAll(reg2, ""); return source; } /** * * 〈 〉 * 〈 〉 * @param input * @param model * @return String * , @exception/throws [ ] [ : * @see [ 、 # 、 # ] */ public String getTempModel(String input,String model){ StringBuffer returnStr = new StringBuffer(); // if(model!=null){ // char[] modelChs = model.toCharArray(); String cm = null; boolean sign = false; for (int i = 1; i < modelChs.length; i++) { // cm = String.valueOf(modelChs[i-1])+String.valueOf(modelChs[i]); // input if(input.indexOf(cm)!=-1){ if(!sign){ returnStr.append(String.valueOf(modelChs[i-1])); } else{ returnStr.append(String.valueOf(modelChs[i-1])); } sign = true; // if(i==modelChs.length-1){ returnStr.append(String.valueOf(modelChs[i])); } }else{ if(sign){ returnStr.append(String.valueOf(modelChs[i-1])); sign=false; } } } } return returnStr.toString(); } public static void main(String[] args) { RangeDifferencerOK r = new RangeDifferencerOK(); String input= " "; String model= " 、 2010 。 、 、 。 , , , “ 、 ” , , , 、 , 。 , , , “ ” , , 。"; input= " "; model= " , 、 “ + ” , 。 E “ ” , , 、 , 。 E 2200 。 、 , , , 。 、 , 、 , , 。 、 , “ ” , 5 , 。 , 。"; // input= " "; // // model= " , 、 , , , 。 、 、 , , 。 、 , 1669 , 。 、 , , , 。 、 , , , 。 , 2000 , 。"; // // input= " , vjishu "; // model= " 2010 。 、 、 。 , , , “ 、 ” , , , 、 , 。 , , , “ ” , , 。"; // StringBuffer s1 = new StringBuffer(); // s1.append("EJP(Extensible Java Profiler ) Java , , . Java Java , .EJP JVMPI(Java Virtual Machine Profiler Interface ) Java ."); // StringBuffer s2 = new StringBuffer(); // s2.append("EJP(Extensible Java Profiler ) dgJava , , . Java Java , .EJP JVMPI(Java Virtual Machine Profiler Interface ) Java ."); input = r.RemovedSymbols(input); model = r.RemovedSymbols(model); //System.out.println(" :"+input.length()); //System.out.println(" :"+model.length()); String newModel = r.getTempModel(input, model); String newInput = r.getTempModel(model, input); // System.out.println(" :"+newModel); // System.out.println(" :"+newInput); //System.out.println(" :"+newInput.length()); //System.out.println(" :"+newModel.length()); //System.out.println(" :"+r.Comparator(newModel, newInput)); System.out.println(" :"+r.Comparator(newInput, newModel)); System.out.println(" :"+r.Comparator2(newInput, newModel)); System.out.println(" :"+r.Comparator3(newInput, newModel)); System.out.println(" :"+newModel); System.out.println(" :"+newInput); //System.out.println(" :"+model); //System.out.println(" :"+model); } }

좋은 웹페이지 즐겨찾기