📄 config.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 + -