最接近Java的NSScanner

时间:2012-05-12 22:24:04

标签: java string string-parsing nsscanner

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

我查看了Java 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它是有效的,因为默认分隔符是空格,但是,第二次调用它失败(为了我的目的)。

3 个答案:

答案 0 :(得分:1)

您可以使用String类(Java.lang.String)实现此目的。

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

    int first_occurence = string.indexOf(substring);

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

    int next_index = indexOf(str,fromIndex);

  3. 如果要保存值,请将它们添加到包装器类并添加到arraylist对象。

答案 1 :(得分: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?)

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

答案 2 :(得分:0)

直接使用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"

根据你想要实际做什么,除了穿过字符串,不同的方法可能会更好/更糟。例如。如果您想在blah> blah之间获得<title字符串,Scanner 便利:

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