2022년 4월 3일 일요일

[기록용] 문자열로 간단한 사칙연산 계산을 담당하는 class

 앞서 구성한 SyntaxBaseDTO 클래스를 상속 받은 class 를 구성 합니다. 

간단한 연산 (+, -, *, / ) 만을 대상으로 합니다. 


public class CalculationSyntaxBaseDTO extends SyntaxBaseDTO {

public CalculationSyntaxBaseDTO(String syntax) {

super(syntax);

initResource();

}

private void initResource() {

parseCurrentSyntaxValue();

}

@Override

public boolean parseCurrentSyntaxValue() {

// TODO Auto-generated method stub

this.setMainType(MAIN_TYPE.CALCULATION_TYPE);

if (CommonBaseUtility.isEmptyValue(syntax)) {

return false;

}

if ( isConstValue() ) {

return true;

}

specialKeySet = CommonParserUtility.parseSpecialKeyValues(syntax);

variableMap = CommonParserUtility.parseVariableValues(syntax);

return true;

}

public String getValue(Map<String,String> transMap) {

if ( isConstValue() ) {

return syntax;

}

String trStr = syntax;

if ( transMap != null ) {

for ( String s : transMap.keySet()) {

if ( specialKeySet.contains(s) || variableMap.containsKey(s)) {

trStr = trStr.replaceAll("\\b" + s + "\\b", transMap.get(s));

}

if ( s.equals(trStr.trim())) {

trStr = transMap.get(s);

break;

}

}

}

if ( "true".equalsIgnoreCase(trStr.trim())) {

return trStr.trim();

} else if ( "false".equalsIgnoreCase(trStr.trim())) {

return trStr.trim();

}

return CommonParserUtility.parseStringBasicCalulation(trStr)+"";

}

public boolean getLogicalValue(Map<String,String> transMap) {

double d = Double.NaN;

if ( isConstValue() ) {

d = Double.parseDouble(syntax);

if ( Double.isNaN(d) || d == 0.0 )

return false;

else 

return true;

}

String trStr = syntax;

if ( transMap != null ) {

for ( String s : transMap.keySet()) {

trStr = trStr.replaceAll("\\b" + s + "\\b", transMap.get(s));

if ( s.equals(trStr.trim())) {

trStr = transMap.get(s);

break;

}

}

}

if ( trStr != null ) 

trStr = trStr.trim();

if ( trStr.equalsIgnoreCase("true")) {

return true;

if ( trStr.equalsIgnoreCase("false")) {

return false;

}

d = CommonParserUtility.parseStringBasicCalulation(trStr);

if ( Double.isNaN(d) || d == 0.0 )

return false;

else 

return true;

}


/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub


}


}


정말 간단한 계산만 수행 합니다. 

댓글 없음:

댓글 쓰기