天天看點

Atitit. camel分詞器 分詞引擎 camel拆分 的實作設計

Atitit. camel分詞器 分詞引擎 camel拆分 的實作設計

1. camel分詞器1

1.1. 實作的界定符号大寫字母小寫字母數字1

1.2. 特殊處理 對于JSONObject 多個大寫字母連寫的處理1

1.3. camel分詞器code1

2. 代碼實作1

2.1. public class CamelScannerQ1 extends Scanner {2

2.2. public class iniState extends State {3

2.3. public class BigCaseLetterState extends State {4

2.4. public class LowerLetterState extends State {5

2.5. public class NumState extends State {7

1. camel分詞器

1.1. 實作的界定符号大寫字母小寫字母數字

1.2. 特殊處理 對于JSONObject 多個大寫字母連寫的處理

1.3. camel分詞器code

2. 代碼實作

package com.attilax.fsm.camelScanner;

import java.util.ArrayList;

import java.util.List;

import com.attilax.fsm.Context;

import com.attilax.fsm.FinishState;

import com.attilax.fsm.Scanner;

import com.attilax.fsm.Token;

import com.attilax.json.JSONArray;

import com.attilax.json.JSONObject;

2.1. public class CamelScannerQ1 extends Scanner {

public static void main(String[] args) {

String s = "fld1=1,fld2='at''t,lax',fld3='val3'";

s = "aaaaCamelJSONObject123forMac";

s="com.sun.jna.platform.win32.Variant$VARIANT$_VARIANT$__VARIANT$BRECORD$ByReference.class";

s="";

//s="a";

@SuppressWarnings("rawtypes")

List tokenList = new CamelScannerQ1().getTokenList(s);

System.out.println(JSONArray.fromObject(tokenList).toString(2));

}

public List<String> getTokenList_retStr(String s)

{

if(s.length()==0)

return new ArrayList<String>();

List<String> li_r=new ArrayList<String>();

List<Token> li=getTokenList(s);

for (Token token : li) {

li_r.add(token.value);

return li_r;

public List getTokenList(String s) {

// DslPaserContext context = new DslPaserContext();

Context context = new Context();

context.setState(new iniState());

int n = 0;

while (!(context.state instanceof FinishState)) {

// System.out.println(n);

// ����

context.request(s);

n++;

if (n > 200)

break;

for (Token tk : context.tokenList) {

// if(tk.value.trim().length()>0)

System.out.println(tk.value + "===");

return (List) context.tokenList;

import com.attilax.fsm.State;

import com.attilax.lang.text.strUtil;

import com.attilax.util.numUtil;

2.2. public class iniState extends State {

@Override

public void handle(String sampleParameter, Context context) {

context.curcharIndex=0;

 char curChar=context.sa[context.curcharIndex];

 if(strUtil.isBigLetter(curChar))

 {

 newToken(context, curChar);

 context.state=new BigCaseLetterState();

 }

 if(strUtil.isLowerLetter(curChar))

  context.state=new LowerLetterState();  

 if(numUtil.isNum(curChar))

 context.state=new NumState();

2.3. public class BigCaseLetterState extends State {

if(MoveNextisEnd(context) ) //or next cur move

return;

context.curToken.value=context.curToken.value+String.valueOf(curChar);

 context.state=new LowerLetterState();

 context.tokenList.add(context.curToken);

 context.curToken=new Token();

 context.curToken.value=context.curToken.value+String.valueOf(curChar);

2.4. public class LowerLetterState extends State {

// TODO Auto-generated method stub

if(MoveNextisEnd(context) )

String trim = context.curToken.value.trim();

String allUpperLetter =trim.substring(0,trim.length()-1);

if(allUpperLetter.startsWith("J"))

System.out.println("");

if(strUtil.isBigLetter(allUpperLetter)  && allUpperLetter.length()>1)  //multi upperLetter

final String word=allUpperLetter.substring(0,trim.length()-2);

Token t=new Token(){

this.value=word;

};

context.tokenList.add(t);

Token t2=new Token();

t2.value=trim.substring( trim.length()-2);

context.curToken=t2;

//context.tokenList.add(t2);

 addCurTokenNnewToken(context, curChar);

// context.state=new LowerLetterState();  //state not change

2.5. public class NumState extends State {

// context.state=new NumState();