⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 config.java

📁 计算器
💻 JAVA
字号:
/**
 * 
 */
package com.calc.config;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * @author 孙晓波
 *	配置类
 *	配置运算符的优先级别
 *	配置表达式中允许使用的数学函数和他们在java中对应的Math.函数,以及参数个数
 */
public abstract class Config {

	private static List operators=new ArrayList(); //String[] 类型的元素。java1.5不支持数组的泛型
	private static List functions=new ArrayList();
	static{
		try{
			//初始化操作符列表
			BufferedReader br=new BufferedReader(new InputStreamReader(Class.forName("com.calc.config.Config").getResourceAsStream("operators"),"UTF-8"));
			String line=null;
			while((line=br.readLine())!=null){
				StreamTokenizer tokenizer=new StreamTokenizer(new InputStreamReader(new ByteArrayInputStream(line.getBytes())));
				tokenizer.ordinaryChar(43); // '+'
				tokenizer.ordinaryChar(45); // '-'
				tokenizer.ordinaryChar(42); // '*'
				tokenizer.ordinaryChar(47); // '/'
				String[] operator=new String[2];
				int type=tokenizer.nextToken();
				if(type==StreamTokenizer.TT_WORD){
					operator[0]=tokenizer.sval;
				}else{
					operator[0]=""+(Character.toChars(tokenizer.ttype))[0];
				}
				tokenizer.nextToken();
				operator[1]=""+tokenizer.nval;
				operators.add(operator);
			}
			br.close();
			//初始化数学函数列表
			br=new BufferedReader(new InputStreamReader(Class.forName("com.calc.config.Config").getResourceAsStream("functions"),"UTF-8"));
			line=null;
			while((line=br.readLine())!=null){
				StreamTokenizer tokenizer=new StreamTokenizer(new InputStreamReader(new ByteArrayInputStream(line.getBytes())));
				String[] function=new String[3];
				tokenizer.nextToken();
				function[0]=tokenizer.sval;
				tokenizer.nextToken();
				function[1]=tokenizer.sval;
				tokenizer.nextToken();
				function[2]=""+tokenizer.nval;
				
				functions.add(function);
			}
		}catch(Exception err){
			System.out.println("Init the Config error!"+err.toString());
		}
	}
	/**
	 * 获取所有的运算符
	 * @return
	 */
	public static List getOperators(){
		return operators;
	}
	/**
	 * 获取所有数学函数
	 * @return
	 */
	public static List getFunctions(){
		return functions;
	}
	/**
	 * 获取一个操作符的优先级
	 * @param op
	 * @return
	 */
	public static double getOperatorPrecedence(String op){
		Iterator iter=getOperators().iterator();
		while(iter.hasNext()){
			String[] operator=((String[])iter.next());
			if(operator[0].equals(op)){
				return Double.valueOf(operator[1]);
			}
		}
		return -1;
	}
	/**
	 * 是否是操作符
	 * @param op
	 * @return
	 */
	public static boolean isOperator(String op){
		Iterator iter=getOperators().iterator();
		while(iter.hasNext()){
			String operator=((String[])iter.next())[0];
			if(operator.equals(op)){
				return true;
			}
		}
		return false;
	}
	/**
	 * 是否是数学函数
	 * @param func
	 * @return
	 */
	public static boolean isFunction(String func){
		Iterator iter=getFunctions().iterator();
		while(iter.hasNext()){
			String operator=((String[])iter.next())[0];
			if(operator.equals(func)){
				return true;
			}
		}
		return false;
	}
	/**
	 * 获取函数的参数计数
	 * @param function
	 * @return
	 */
	public static double getFunctionArgsCount(String function){
		Iterator iter=getFunctions().iterator();
		while(iter.hasNext()){
			String[] func=((String[])iter.next());
			if(func[0].equals(function)){
				return Double.valueOf(func[2]);
			}
		}
		return -1;
	}
	/**
	 * 获取对应的Math函数
	 * @param function
	 * @return
	 */
	public static String getMathFunc(String function){
		Iterator iter=getFunctions().iterator();
		while(iter.hasNext()){
			String[] func=((String[])iter.next());
			if(func[0].equals(function)){
				return func[1];
			}
		}
		return null;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -