Android 如何转换完整字符串10+;20 - 25; 像文本一样,从编辑文本中获取,加倍?
如何转换包含数学算术运算的字符串类似于Android 如何转换完整字符串10+;20 - 25; 像文本一样,从编辑文本中获取,加倍?,android,string,android-edittext,double,Android,String,Android Edittext,Double,如何转换包含数学算术运算的字符串类似于“10+20-25”,我从EditText中获取字符串,我希望转换得到运算结果。以下是我的代码以解决您的问题: public class ExecuteHandler { private static Character[] OPERATORS = { '/', '*', '+', '-' }; private static final String REGEXOPERATORS = "[/+,-,/*,//,-]"; privat
“10+20-25”
,我从EditText中获取字符串,我希望转换得到运算结果。以下是我的代码以解决您的问题:
public class ExecuteHandler {
private static Character[] OPERATORS = { '/', '*', '+', '-' };
private static final String REGEXOPERATORS = "[/+,-,/*,//,-]";
private static final String REGEXDIGITS = "(\\d+)";
private ArrayList<Character> operators = new ArrayList<>();
private ArrayList<Integer> digits = new ArrayList<>();
public String execute(String math) {
StringBuilder result = new StringBuilder();
try {
getDigits(math);
getOperators(math);
getNextOperator(operators);
for (Integer digit : digits) {
result.append(String.valueOf(digit));
}
} catch (ArithmeticException | IndexOutOfBoundsException e) {
return "ERROR";
}
return result.toString().isEmpty() ? "ERROR" : result.toString();
}
public void clear() {
operators.clear();
digits.clear();
}
private void getNextOperator(ArrayList<Character> operators) {
for (Character op : OPERATORS) {
for (int i = 0; i < operators.size(); i++) {
if (operators.get(i) == '/') {
operators.remove(i);
digits.set(i, (digits.get(i) / digits.get(i + 1)));
digits.remove(i + 1);
i -= 1;
}
}
for (int i = 0; i < operators.size(); i++) {
if (operators.get(i) == '*') {
operators.remove(i);
digits.set(i, (digits.get(i) * digits.get(i + 1)));
digits.remove(i + 1);
i -= 1;
}
}
for (int i = 0; i < operators.size(); i++) {
if (operators.get(i) == '+') {
operators.remove(i);
digits.set(i, (digits.get(i) + digits.get(i + 1)));
digits.remove(i + 1);
i -= 1;
}
}
for (int i = 0; i < operators.size(); i++) {
if (operators.get(i) == '-') {
operators.remove(i);
digits.set(i, (digits.get(i) - digits.get(i + 1)));
digits.remove(i + 1);
i -= 1;
}
}
}
}
private void getDigits(String math) {
Pattern r = Pattern.compile(REGEXDIGITS);
Matcher m = r.matcher(math);
while (m.find()) {
int t = Integer.parseInt(math.substring(m.start(), m.end()));
digits.add(t);
}
}
private void getOperators(String math) {
Pattern r = Pattern.compile(REGEXOPERATORS);
Matcher m = r.matcher(math);
while (m.find()) {
operators.add(math.charAt(m.start()));
}
}
}
公共类执行句柄{
私有静态字符[]运算符={'/','*','+','-'};
私有静态最终字符串REGEXOPERATORS=“[/+,-,/*,//,-]”;
私有静态最终字符串REGEXDIGITS=“(\\d+”;
私有ArrayList运算符=新ArrayList();
私有ArrayList位数=新ArrayList();
公共字符串执行(字符串数学){
StringBuilder结果=新建StringBuilder();
试一试{
获取数字(数学);
getOperators(数学);
getNextOperator(操作员);
for(整数:位数){
result.append(String.valueOf(digital));
}
}catch(算术异常| IndexOutOfBoundsException e){
返回“错误”;
}
返回result.toString().isEmpty()?“ERROR”:result.toString();
}
公共空间清除(){
运算符。清除();
数字。清除();
}
私有void getNextOperator(ArrayList运算符){
for(字符op:运算符){
对于(int i=0;i
调用方法
execute
,输入为string
如“10+20-25:”
,结果将是一个值字符串(如果成功)或错误
(如果有语法错误)。意味着在获取文本后,您还想执行算术运算吗?是的,当然。。我想和运营商转换一下非常感谢