2012-05-12 72 views
1

我正在將一些代碼從objective-c移動到java。該項目是一個XML/HTML解析器。在目標c中,我幾乎只使用scanUpToString(「mystring」);方法。Java中最接近NSScanner的東西

我看了一下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,因爲默認分隔符是空格,但是第二次調用它失敗(對於我的目的)。

+2

你能具體談談什麼'Scanner'是不是讓你做什麼?從你寫的內容看來,即使'Scanner'看起來像是過量殺毒,你可以使用['String#indexOf'](http://docs.oracle.com/javase/7/docs/api/java/lang/String的.html#的indexOf%28java.lang.String,%20int%29)。 – trutheality

回答

0

這真的是隻用String的methodsdirectly簡單:

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" 

根據您想真正做除了通過串走的東西,不同的方法可能會更好/更差。例如。如果你想獲得<title的之間的blah> blah串,Scanner方便:

String test = "<title balh> blah <title> blah>"; 
Scanner scan = new Scanner(test); 
scan.useDelimiter("<title"); 
String stuff = scan.next(); // gets " blah> blah "; 
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

1

您可以使用String類(Java.lang.String)來實現此目的。

  1. 首先得到你的子串的第一個索引。

    int first_occurence = string.indexOf(substring);

  2. 然後遍歷整個字符串並獲得子

    INT next_index =的indexOf(STR,的fromIndex)的下一個值;

  3. 如果要保存這些值,請將它們添加到包裝類並添加到一個數組列表對象。