1

我正在将一些代码从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); 扫描到下一次出现的末尾"<title"

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

4

3 回答 3

1

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

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

    int first_occurence= string.indexOf(substring);

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

    int next_index=indexOf(str,fromIndex);

  3. 如果要保存这些值,请将它们添加到包装类并添加到 arraylist 对象。
于 2012-05-12T22:59:32.160 回答
0

也许 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.

于 2012-05-12T22:55:53.253 回答
0

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

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"

根据除了遍历字符串之外您想要实际执行的操作,不同的方法可能更好/更差。例如,如果您想获取'sblah> blah之间的字符串,a方便:<titleScanner

String test = "<title balh> blah <title> blah>";
Scanner scan = new Scanner(test);
scan.useDelimiter("<title");
String stuff = scan.next(); // gets " blah> blah ";
于 2012-05-12T23:23:41.283 回答