Package org.nutz.el.parse

Source Code of org.nutz.el.parse.StringParse

package org.nutz.el.parse;

import org.nutz.el.ElException;
import org.nutz.el.Parse;

/**
* 字符串转换器
* @author juqkai(juqkai@gmail.com)
*
*/
public class StringParse implements Parse {
    public Object fetchItem(CharQueue exp) {
        //@ JKTODO 添加转意字符
        switch(exp.peek()){
        case '\'':
        case '"':
            StringBuilder sb = new StringBuilder();
            char end = exp.poll();
//            while(!exp.isEmpty() && !exp.peek().equals(end)){
            while(!exp.isEmpty() && exp.peek() != end){
                if(exp.peek() == '\\') {//转义字符?
                    parseSp(exp, sb);
                }else{
                    sb.append(exp.poll());
                }
            }
            exp.poll();
            return sb.toString();
        }
        return nullobj;
    }
   
    private void parseSp(CharQueue exp, StringBuilder sb){
        switch (exp.poll()) {
        case 'n':
            sb.append('\n');
            break;
        case 'r':
            sb.append('\r');
            break;
        case 't':
            sb.append('\t');
            break;
        case '\\':
            sb.append('\\');
            break;
        case '\'':
            sb.append('\'');
            break;
        case '\"':
            sb.append('\"');
            break;
        case 'u':
            char[] hex = new char[4];
            for (int i = 0; i < 4; i++)
                hex[i] = exp.poll();
            sb.append((char)Integer.valueOf(new String(hex), 16).intValue());
            break;
        case 'b': //这个支持一下又何妨?
            sb.append(' ');//空格
            break;
        case 'f':
            sb.append('\f');//这个支持一下又何妨?
            break;
        default:
            throw new ElException("Unexpected char");    //1.b.37及之前的版本,会忽略非法的转义字符
        }
    }

    public static void main(String args[]){
        double x = .1 + 5;
        System.out.println(x);
    }
}
TOP

Related Classes of org.nutz.el.parse.StringParse

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.