提取字符串中的最长合法简单数学表达式,
字符串长度最长的,并计算表达式的值。
如果没有返回0
.
简单数学表达式只能包含以下内容:
0-9
数字,符号+-*
说明:
long
+--+1
是不合法的字符串
表达式值
1-2abcd
-1
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* Created with IntelliJ IDEA.
* Author: Amos
* E-mail: amos@amoscloud.com
* Date: 2022/5/21
* Time: 14:28
* Description:
*/
public class Main0124 {
public static void main(String[] args) {
try (Scanner scanner = new Scanner(System.in)) {
String line = scanner.nextLine();
solution(line);
}
}
private static final String v = "0123456789+-*";
private static void solution(String line) {
char[] chars = line.toCharArray();
List<String> list = new LinkedList<>();
for (int i = 0; i < chars.length; i++) {
char cur = chars[i];
if (Character.isDigit(cur)) {
int start = i;
while (i + 1 < chars.length &&
v.contains(chars[i + 1] + "")) {
if (!Character.isDigit(cur) &&
!Character.isDigit(chars[i + 1])) {
break;
}
i++;
}
list.add(line.substring(start, i + 1));
}
}
list.sort((s1, s2) -> Integer.compare(s2.length(), s1.length()));
if (list.size() > 0) {
String res = calc(list.get(0));
System.out.println(res);
}else{
System.out.println(0);
}
}
private static String calc(String str) {
char[] chars = str.toCharArray();
StringBuilder sb = new StringBuilder();
for (char aChar : chars) {
if (Character.isDigit(aChar)) {
sb.append(aChar);
} else {
sb.append(",").append(aChar).append(",");
}
}
List<String> list = Stream.of(sb.toString().split(",")).collect(Collectors.toList());
return splitStepCalculate(list).get(0);
}
public static List<String> splitStepCalculate(List<String> cls) {
if (cls.size() == 1) {
return cls;
}
//计算乘除法
for (int i = 0; i < cls.size(); i++) {
if (cls.get(i).equals("*")) {
calculate(cls, i, "*");
i = 0;
}
if (i < cls.size() && cls.get(i).equals("/")) {
calculate(cls, i, "/");
i = 0;
}
}
//计算加减法
for (int i = 0; i < cls.size(); i++) {
if (cls.get(i).equals("+")) {
calculate(cls, i, "+");
i = 0;
}
if (i < cls.size() && cls.get(i).equals("-")) {
calculate(cls, i, "-");
i = 0;
}
}
return cls;
}
private static void calculate(List<String> cls, int i, String symbol) {
int s = Integer.parseInt(cls.get(i - 1));
int e = Integer.parseInt(cls.get(i + 1));
int t = 0;
switch (symbol) {
case "*":
t = s * e;
break;
case "/":
t = s / e;
break;
case "+":
t = s + e;
break;
case "-":
t = s - e;
break;
}
cls.set(i, t + "");
cls.remove(i - 1);
cls.remove(i);
}
}