【问题标题】:Reading a String and get the numbers out of it; [closed]读取字符串并从中获取数字; [关闭]
【发布时间】:2015-02-17 09:42:19
【问题描述】:

我想从字符串中解析数字。

示例输入字符串:0 = 2*x+2*x^2-4

转换为:

leftside = 0

rightside = 2*x,2*x^2,-4

最后我想将数字保存在变量中,例如 leftN = 0 , rightX = 2

如何做到这一点?有什么提示吗?

【问题讨论】:

  • 字符串拆分和数字解析。
  • 要获得实际数字,您必须进行评估。谷歌为它
  • 您也可以参考此SO Question 或Shunting Yard Algorithm 了解更多信息(注意:与您的问题相比完全先进)。
  • 你想达到什么目的?获得每一边的多项式次数?你的问题很模糊。

标签: java string equation


【解决方案1】:

首先您可以使用split() 方法将字符串分成两部分,LHS 和 RHS 方法签名是这样的,

 public String[] split(String regex, int limit) //limit: maximum strings splited

或

public String[] split(String regex)

简单的例子,

String[] str_array = "0 = 2*x+2*x^2-4".split(" = ");
String LHS = str_array[0]; 
String RHS = str_array[1];

进一步继续拆分 RHS 字符串,并通过拆分 - 和 + 将其作为可能的 elements[],以便您可以进一步拆分并获得 RHS 作为术语。

获取数字为ints,您可以使用,

try{
   Integer.parseInt(elements[i]);
}catch(NumberFormatException e){
   parsable = false;
}

【讨论】:

  • @MarvinJoke 如果您能接受我的回答,如果您觉得它有用,我们将不胜感激!
【解决方案2】:

用你想要不同的字符分割你的字符串

String[] s = display.split("=");

【讨论】:

    【解决方案3】:

    如果您想检索 0 和 2 的值,您可以使用split() 方法进一步检索准确的值:

    String display = "0 = 2*x+2*x^2-4";
    int leftN = Integer.parseInt(display.split("=")[0].trim());
    int rightX = Integer.parseInt(display.split("=")[1].trim().split("\\*")[0].trim());
    System.out.println(leftN + ", " + rightX);
    //output: 0, 2
    

    第一行从= 处的拆分中检索第一个值。 第二行从= 处的拆分中检索第二个值,然后拆分* 的所有情况。它从该拆分中检索第一个值。 trim() 是为了确保没有空格,这会导致NumberFormatException。

    但是,如果您不希望值是 int 值:

    String display = "0 = 2*x+2*x^2-4";
    String leftN = (display.split("=")[0].trim();
    String rightX = display.split("=")[1].trim().split("\\*")[0].trim();
    System.out.println(leftN + ", " + rightX);
    //output: 0, 2
    

    此外,如果您想在等式的x^2 部分获取2:

    String rightX = display.split("\\^")[1].trim().split("-")[0].trim();
    

    【讨论】:

    • 它不需要将它们解析为整数,对吗?看看他的例子!
    • save the numbers in variables like leftN = 0 , rightX = 2。也许他没有,但至少它表明它正确地获取了值。
    • 请注意,在"x^2" 的情况下,这不起作用。我假设他想要的2 是多项式的次数。
    • @mbomb007 看起来像是纯粹的猜测,但以防万一我把它扔进答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多