【问题标题】:Using Scanner for separating a string使用 Scanner 分隔字符串
【发布时间】:2017-12-11 08:04:09
【问题描述】:

我正在尝试将数字(包括 Double)与“4+5*(4.5+6)”等字符串分开。 我考虑过使用扫描仪将数字与我的字符串分开。我想知道是否有更好的方法可以做到这一点,并且想知道如何使用扫描仪做到这一点? 这是我的代码,只是想检查它是否有效并抛出异常......

package testzehavit;

import java.util.Scanner;

public class main {

    public static void main(String[] args) {
        Scanner s= new Scanner("443+54+24");
        s.useDelimiter("+");
        System.out.println(s.next());

    }

}

谢谢

【问题讨论】:

  • 您打算计算嵌套算术表达式吗?不要为此使用正则表达式,使用解析器。

标签: java string java.util.scanner


【解决方案1】:

来自this question/answer,您必须转义+,因为该方法采用正则表达式而不是文字字符串。在 Java 中,您使用双反斜杠 \\ 转义。这段代码:

public static void main(String[] args) {
    Scanner s = new Scanner("443+54+24");
    s.useDelimiter("\\+");
    System.out.println(s.next());
}

打印443

【讨论】:

    【解决方案2】:

    扫描仪分隔符是正则表达式。符号 '+' 在正则表达式中用于表示“一次或多次”。

    你想做的是:

    public static void main(String[] args) {
        Scanner s= new Scanner("443+54+24");
        s.useDelimiter("\\+");
        System.out.println(s.next());
    
    }
    

    【讨论】:

    • 谢谢!如果我想使用多个分隔符怎么办? (例如对于字符串 "4+5*(4.5+6)" )。有可能吗?
    • 然后使用\\+|\\*
    • 你可以@Jovani 使用"[+*\\(\\)\\.\"]"
    • @TimBiegeleisen 的回答很好,但如果我愿意,我会看看如何构建正则表达式:en.wikipedia.org/wiki/Regular_expression 然后您可以使用在线工具来尝试您的正则表达式(例如 @ 987654322@ ) 另外,您可以专注于数学,这里有一个关于该主题的问题示例:stackoverflow.com/questions/1631820/…
    【解决方案3】:

    使用 String.contains();方法。 您可以在其中放置一个表示数字和操作数范围的正则表达式,或者执行一个简单的 for 循环并将每次迭代解析为 String 以将其作为参数传递给 contains 方法。

    很抱歉没有演示任何代码,但我正在使用手机。 谷歌 String.contains() 和正则表达式。您应该能够将两者结合起来。

    【讨论】:

      【解决方案4】:

      public static void main(String[] args) {

      Scanner s = new Scanner("443+54+24");
      
      s.useDelimiter("\\+");
      
      System.out.println(s.next());
      

      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-10
        • 1970-01-01
        • 2018-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多