用状态方程解析出Java代码的三种注释

package com.jielan.state.comment;

import java.util.ArrayList;
import java.util.List;

public class Main {
	private State state;
	
	public List<String> getComments(String input) {
		List<String> list = new ArrayList<String>();
		int virStart=0,	docStart=0, comStart=0;
		
		state = State.READ_SKIP.read(input.charAt(0));
		
		for(int i=1;i<input.length();i++){
			state = state.read(input.charAt(i));
			if(state.equals(State.DOUBLE_VIRGULE)){
				virStart = i-1;
			}else if(state.equals(State.DOCUMENT_START)){
				docStart = i-2;
			}else if(state.equals(State.COMMENT_START)){
				comStart = i-1;
			}else if(state.equals(State.END_VIRGULE)){
				list.add("单行注释:"+input.substring(virStart, i+1));
			}else if(state.equals(State.END_DOCUMENT)){
				list.add("文档注释:"+input.substring(docStart, i+1));
			}else if (state.equals(State.END_COMMENT)) {
				list.add("文本注释:"+input.substring(comStart, i+1));
			}
		}
		return list;
	}
	public static void main(String[] args) {
		Main main = new Main();
		String input = "/**544*fdsaf\newr/*/**dsfia/*/*/";
		List<String> list = main.getComments(input);
		for(String var:list){
			System.out.println(var);
		}
	}
}




package com.jielan.state.comment;

public enum State {
	//开始浏览
	READ_SKIP{
		@Override
		public State read(Character c) {
			switch (c) {
			case '/':
				return FIND_VIRGULE;

			default:
				return READ_SKIP;
			}
		}
	},
	//发现斜杠
	FIND_VIRGULE{
		@Override
		public State read(Character c) {
			switch (c) {
			case '/':
				return DOUBLE_VIRGULE;
			case '*':
				return COMMENT_START;
			default:
				return READ_SKIP;
			}
		}
	},
	//发现双斜杠
	DOUBLE_VIRGULE{
		@Override
		public State read(Character c) {
			switch (c) {
			case '\n':
				return END_VIRGULE;
			default:
				return VIRGULE_CONTINUE;
			}
		}
	},
	
	VIRGULE_CONTINUE{
		@Override
		public State read(Character c) {
			switch (c) {
			case '\n':
				return END_VIRGULE;
			default:
				return VIRGULE_CONTINUE;
			}
		}
	},
	//   '/*' 后继状态处理 (文本注释or文档注释开始)
	COMMENT_START{
		@Override
		public State read(Character c) {
			switch (c) {
			case '*':
				return DOCUMENT_START;
			default:
				return COMMENT_CONTINUE;
			}
		}
	},
	// ‘/*^[*]’ 后继处理
	COMMENT_CONTINUE{
		@Override
		public State read(Character c) {
			switch (c) {
			case '*':
				return COMMENT_FIND;
			default:
				return COMMENT_CONTINUE;
			}
		}
	},
//	//  ‘/**’  后继处理
//	SECOND_ASTERISK{
//		@Override
//		public State read(Character c) {
//			switch (c) {
//			case '*':
//				return DOCUMENT_FIND;
//			case '/':
//				return END_COMMENT;
//			default:
//				return DOCUMENT_CONTINUE;
//			}
//		}
//	},
	//‘/*(任意)*’后继处理   发现文本注释   结束星号
	COMMENT_FIND{

		@Override
		public State read(Character c) {
			switch (c) {
			case '/':
				return END_COMMENT;
			case '*':
				return COMMENT_FIND;

			default:
				return COMMENT_CONTINUE;
			}
		}
		
	},
	
	//'/**' 后继     文档注释开始
	DOCUMENT_START{
		@Override
		public State read(Character c) {
			switch (c) {
			case '*':
				return DOCUMENT_FIND;
			case '/':
				return END_COMMENT;
			default:
				return DOCUMENT_CONTINUE;
			}
		}
	},
	//   ‘/**(任意)’ 后继    文档注释开始
	DOCUMENT_CONTINUE{
		@Override
		public State read(Character c) {
			switch (c) {
			case '*':
				return DOCUMENT_FIND;
			default:
				return DOCUMENT_CONTINUE;
			}
		}
	},
	//   ‘/**(任意)*’后继     发现文档注释的 结束星号 
	DOCUMENT_FIND{
		@Override
		public State read(Character c) {
			switch (c) {
			case '/':
				return END_DOCUMENT;
			case '*':
				return DOCUMENT_FIND;
			default:
				return DOCUMENT_CONTINUE;
			}
		}
	},
	
    //‘//’形式注释结束
    END_VIRGULE{
        @Override
        public State read(Character c) {
            switch (c) {
            case '/':
                return FIND_VIRGULE;

            default:
                return READ_SKIP;
            }
        }
    },
    //‘/**    */’注释结束
    END_DOCUMENT{
        @Override
        public State read(Character c) {
            switch (c) {
            case '/':
                return FIND_VIRGULE;

            default:
                return READ_SKIP;
            }
        }
    },
    //  ‘/*   */’注释结束
    END_COMMENT{
        @Override
        public State read(Character c) {
            switch (c) {
            case '/':
                return FIND_VIRGULE;

            default:
                return READ_SKIP;
            }
        }
    };
	
	public abstract State read(Character c);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值