사칙직연산---다중괄호 삽입.
2734 단어 운산
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class M
{
/**
* @author
*/
Matcher mTemp, m;
Pattern p1 = Pattern.compile("\\d+?[*/]\\d+"), p2 = Pattern
.compile("\\d+?[+-]\\d+"), p = Pattern.compile("(?<=\\().+?(?=\\))");
public static void main(String[] args)
{
String jss = "(23+15/5+12)+1*10+(10*2+(10*2+1))";
//
System.out.println(new M().js(jss));
}
private String js(String s)
{
String temp, sTemp;
//
try
{
m = p.matcher(s);
while (m.find())//
{
sTemp = temp = m.group();
temp = sz(temp);
s = s.replace("(" + sTemp + ")", temp);
m = p.matcher(s);// .
}
s = sz(s);
return s;
} catch (Exception e)
{
e.printStackTrace();
return " ! .";
}
}
private String sz(String temp)
{
String sTemp;
int iTemp = 0;
//
mTemp = p1.matcher(temp);
while (mTemp.find())
{//
sTemp = mTemp.group();
if ((iTemp = sTemp.indexOf("*")) != -1)
{
iTemp = Integer.valueOf(sTemp.substring(0, iTemp))
* Integer.valueOf(sTemp.substring(iTemp + 1));
} else if ((iTemp = sTemp.indexOf("/")) != -1)
{
iTemp = Integer.valueOf(sTemp.substring(0, iTemp))
/ Integer.valueOf(sTemp.substring(iTemp + 1));
}
temp = temp.replace(sTemp, "" + iTemp);
mTemp = p1.matcher(temp);
}
mTemp = p2.matcher(temp);
while (mTemp.find())
{//
sTemp = mTemp.group();
if ((iTemp = sTemp.indexOf("+")) != -1)
{
iTemp = Integer.valueOf(sTemp.substring(0, iTemp))
+ Integer.valueOf(sTemp.substring(iTemp + 1));
} else if ((iTemp = sTemp.indexOf("-")) != -1)
{
iTemp = Integer.valueOf(sTemp.substring(0, iTemp))
- Integer.valueOf(sTemp.substring(iTemp + 1));
}
temp = temp.replace(sTemp, "" + iTemp);
mTemp = p2.matcher(temp);
}
return temp;
}
}
나는 단지 약간의 연산을 시험해 보았을 뿐, 너무 복잡한 상황이 결과의 정확성을 보장할 수 있는지 모르겠다.
그러니 검증되지 않은 상태에서 먼저 시도해 보세요.