我试图将多项式的常数项存储为整数时遇到解析问题,因为在大多数简单的情况下它们可能是1-3位长,并且在将方程式保存为字符串时,我是无法从alpha值和符号中解析出整数。
我尝试过创建像
这样的东西 int x = eq.indexOf('x');
但是因为字符串中重复了'x'字符,所以解析方法无效。
在这样的情况下,是否有更有效的方法来分离数值和alpha值?
答案 0 :(得分:0)
正则表达式是你的朋友:
private static List<Integer> extractIntegers(String text) {
List<Integer> integers = new ArrayList<>();
Matcher m = Pattern.compile("\\d+").matcher(text);
while (m.find())
integers.add(Integer.parseInt(m.group()));
return integers;
}
测试
System.out.println(extractIntegers("5 + 7 * 13"));
System.out.println(extractIntegers("Simon77 told me 2 go 4 icecream"));
输出
[5, 7, 13]
[77, 2, 4]
答案 1 :(得分:0)
我猜你要解析一些描述多项式的字符串“25x ^ 2 + 2x + 35”。我可能尝试的一种方法是从第一个字符开始(即2
)并在字符串中向前移动以跟踪某个内部状态:
int state = 1;
for(int i=0; i < my_string.length(); i++) {
char next_char = my_string.charAt(i);
// ...
}
下一个状态将是当前状态和读取的当前字符的函数。可能的状态集如下:
每次阅读新角色时,您都会根据上次状态转换到新状态。
我有一些int state
和一系列switch语句/ if语句,用以确定我的功能:(i)当前状态和(ii)我刚读过的数字。
有人可能提出的东西要短得多。但至少,这将是一个很好的编程练习。