【问题标题】:Convert an String to an array of doubles split with non-number characters将字符串转换为使用非数字字符拆分的双精度数组
【发布时间】:2013-03-30 01:35:48
【问题描述】:

我知道如何用空格等​​特殊字符分割字符串:

String numbers = "22 14 10 8 70";
int [] n1 = new int [numbers.length()];
for(int n = 0; n < numbers.length(); n++) {
    n1[n] = Integer.parseInt(numbers.split(" ")[n]);
}

但我想用任何非数字(也包括负号和浮点)类型的字符来分割字符串;像这样的字符串:

String numbers = "22+14/10*8-70";

【问题讨论】:

  • 正则表达式不是解决这个问题的方法。
  • @LuiggiMendoza 我从标签中删除正则表达式
  • String.split() 可以拆分正则表达式字符串
  • @jedwards 这看起来像公式解析,而正则表达式不是要走的路。

标签: java string


【解决方案1】:

试试这个算法Shunting-yard algorithm

调车码算法是一种解析数学的方法 中缀表示法指定的表达式。

【讨论】:

    【解决方案2】:

    您也可以先将可用表达式转换为Postfix 表达式,然后对其求值。 Here 是关于它的解释。

    【讨论】:

      【解决方案3】:

      String.split() 可以拆分正则表达式字符串:

      String numbers = "22+14/10*8-70";
      String[] elements = numbers.split("[^0-9\\.]");
      for(String e : elements)
      {
          System.out.println("Element: " + e);
      }
      

      打印:

      Element: 22
      Element: 14
      Element: 10
      Element: 8
      Element: 70
      

      【讨论】:

      • 再试一次,现在使用 22.5+14.0/10.0*8.0-70.5
      • 我和@LuiggiMendoza 在一起我想要双倍的结果
      • @Ehsan,双打被正确解析,负数没有。顺便说一句,当您编辑问题并在其中放置“编辑”行时,这很好,所以像 Luiggi 这样不喜欢投票的人会意识到答案是在问题编辑之前发布的。
      • @jedwards 两个具有较高代表(63k 和 105k)的人在你之前回答了这个问题,他们删除了他们的答案,因为没有解决这个问题。另外,请阅读What is an acceptable answer?,第 7 节。
      • 答案是在编辑问题之前发布的。对于一般的非公式解析案例,它是一个不错的答案。请注意,问题标题是Convert an String to an array of doubles split with non-number characters,而不是Formula Parsing。您已经指出并且我承认这不适用于带有负数的公式。我还赞成一个更适合该问题的答案,因为它已被编辑。有点奇怪的是,你没有建设性地自己回答问题,而是用反对票来监督......哦,好吧。
      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多