【问题标题】:closest thing to NSScanner in JavaJava中最接近NSScanner的东西
【发布时间】:2012-05-12 22:24:03
【问题描述】:

我正在将一些代码从objective-c 移到java。该项目是一个 XML/HTML 解析器。在目标 c 中,我几乎只使用 scanUpToString("mystring");方法。

我查看了 Java Scanner 类,但它将所有内容都分解为标记。我不想要那个。我只想能够扫描最多出现的子字符串并跟踪扫描仪在整个字符串中的当前位置。

任何帮助将非常感谢!

编辑

更具体。我不希望 Scanner 进行标记化。

String test = "<title balh> blah <title> blah>";
    Scanner feedScanner = new Scanner(test);
    String title = "<title";
    String a = feedScanner.next(title);
    String b = feedScanner.next(title);

在上面的代码中,我想要 feedScanner.next(title);扫描到下一次出现 "&lt;title" 的末尾

实际发生的情况是第一次调用 feeScanner.next 它可以工作,因为默认分隔符是空格,但是,第二次调用它会失败(出于我的目的)。

【问题讨论】:

  • 您能否更具体地说明Scanner 不允许您做什么?从您所写的内容来看,即使Scanner 也有点矫枉过正,您可以使用String#indexOf

标签: java string string-parsing nsscanner


【解决方案1】:

您可以使用 String 类 (Java.lang.String) 来实现这一点。

  1. 首先获取子字符串的第一个索引。

    int first_occurence= string.indexOf(substring);

  2. 然后遍历整个字符串并获取子字符串的下一个值

    int next_index=indexOf(str,fromIndex);

  3. 如果您想保存这些值,请将它们添加到包装类并添加到 arraylist 对象。

【讨论】:

    【解决方案2】:

    直接使用String的方法确实更容易:

    String test = "<title balh> blah <title> blah>";
    String target = "<title";
    int index = 0;
    index = test.indexOf( target, index ) + target.length();
    // Index is now 6 (the space b/w "<title" and "blah"
    index = test.indexOf( target, index ) + target.length();
    // Index is now at the ">" in "<title> blah"
    

    根据除了遍历字符串之外您想要实际执行的操作,不同的方法可能更好/更差。例如。如果你想得到&lt;title之间的blah&gt; blah字符串,一个Scanner 方便:

    String test = "<title balh> blah <title> blah>";
    Scanner scan = new Scanner(test);
    scan.useDelimiter("<title");
    String stuff = scan.next(); // gets " blah> blah ";
    

    【讨论】:

      【解决方案3】:

      也许 String.split 适合你?

      s = "The almighty String is mystring is your String is our mystring-object - isn't it?";
      parts = s.split ("mystring");
      

      结果:

      Array("The almighty String is ", " is your String is our ", -object - isn't it?)
      

      你知道在你的“mystring”之间一定是。我不确定开始和结束,所以也许你需要一些s.startsWith ("mystring") / s.endsWith

      【讨论】:

        猜你喜欢
        • 2020-08-13
        • 1970-01-01
        • 1970-01-01
        • 2011-06-08
        • 1970-01-01
        • 2011-08-28
        • 1970-01-01
        • 2013-01-28
        • 1970-01-01
        相关资源
        最近更新 更多