当长度未知时,String to Integer

时间:2015-12-01 04:01:43

标签: java

我试图将多项式的常数项存储为整数时遇到解析问题,因为在大多数简单的情况下它们可能是1-3位长,并且在将方程式保存为字符串时,我是无法从alpha值和符号中解析出整数。

我尝试过创建像

这样的东西
    int x = eq.indexOf('x');

但是因为字符串中重复了'x'字符,所以解析方法无效。

在这样的情况下,是否有更有效的方法来分离数值和alpha值?

2 个答案:

答案 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);

   // ...

}

下一个状态将是当前状态和读取的当前字符的函数。可能的状态集如下:

  1. 当前字符是空格或字符串的开头。
  2. 当前字符是表示系数的数字。
  3. 当前字符是变量(即“x”)。
  4. 当前字符是指数字符(即'^')
  5. 当前字符是指数位。
  6. 每次阅读新角色时,您都会根据上次状态转换到新状态。

    • EG。如果您处于状态(1)并读取字符数字,则转换到状态(2)(即您正在读取系数)
    • EG。如果我处于状态(2)并读取数字,我会保持状态(2)。我将我读过的字符添加到一些累积的数字字符串
    • EG。如果你处于状态(2)并读取字符'x',你应该解析你累积的数字,这是你的下一个系数。
    • EG。如果您处于状态(4)并读取数字,则转换到状态(5)。

    我有一些int state和一系列switch语句/ if语句,用以确定我的功能:(i)当前状态和(ii)我刚读过的数字。

    注释

    有人可能提出的东西要短得多。但至少,这将是一个很好的编程练习。