2011-08-20 92 views
3

我將如何「找到」和「得到」兩個字符串之間的值?如何找到兩個字符串之間的值?

即:<a>3</a>

我讀文件找到<a>,位置是從哪裏開始,那麼它就會停止閱讀時,發現</a>我想返回的值是「3」。

使用JRE 6

+1

正則表達式將起作用,FSVO「工作」。但是,HTML/XML解析(相關但不同)應該使用適當的工具(希望支持強大的選擇器語言)來完成。 – 2011-08-20 02:03:22

+0

[搜索標籤,然後將標籤之間的文本保存爲變量]的確切副本(http://stackoverflow.com/questions/7093716/searching-for-a-tag-then-saving-text-between-tag-作爲一個變量) –

回答

12

你的兩個主要的選項是:

1)優選的但潛在的複雜:使用XML/HTML解析器和得到的第一個 「a」 元素中的文本。例如使用Jsoup(感謝@ alpha123):

Jsoup.parse("<a>3</a>").select("a").first().text(); // => "3" 

2)容易,但也不是很可靠的:使用正則表達式來提取<a></a>字符串之間的字符。例如: -

String s = "<a>3</a>"; 
Pattern p = Pattern.compile("<a>(.*?)</a>") 
Matcher m = p.matcher(s); 
if (m.find()) { 
    System.out.println(m.group(1)); // => "3" 
} 
+0

,我將如何做簡單的方法? – Mario

+2

只要標籤沒有嵌套正則表達式是可靠的 –

+1

@ratchet怪胎這是隻要沒有人寫'< a>'或編碼的某個部分,或...不是真的可靠 – Voo

2

您可以使用正則表達式:

try { 
    Pattern regex = Pattern.compile("<a>(.*)</a>"); 
    Matcher regexMatcher = regex.matcher(subjectString); 
    while (regexMatcher.find()) { 
     for (int i = 1; i <= regexMatcher.groupCount(); i++) { 
      // matched text: regexMatcher.group(i) 
      // match start: regexMatcher.start(i) 
      // match end: regexMatcher.end(i) 
     } 
    } 
} catch (PatternSyntaxException ex) { 
    // Syntax error in the regular expression 
} 

但是,如果你輸入HTML,你真的應該考慮使用HTML解析器。

+0

...你爲什麼把這個包裝在try塊中? –

+0

代碼由[RegexBuddy](http://www.regexbuddy.com/)生成,但如果沒有語法錯誤(例如在這種情況下),則沒有必要。 –

6

Jsoup將很容易做到這一點。

String title = Jsoup.parse("<a>3</a>").select("a").first().text(); 
+0

Jsoup例子+1! – maerics

相關問題