我有一個這樣的字符串:如何找到一個字符串包含數字後跟一個特定的字符串
String str = "Friday 1st August 2013"
我需要檢查:如果字符串包含「任意數量」後面的「ST」的字符串,打印「是」,否則打印「否」。
我試過了:if (str.matches(".*\\dst"))
和if (str.matches(".*\\d.st"))
但它不起作用。
任何幫助?
我有一個這樣的字符串:如何找到一個字符串包含數字後跟一個特定的字符串
String str = "Friday 1st August 2013"
我需要檢查:如果字符串包含「任意數量」後面的「ST」的字符串,打印「是」,否則打印「否」。
我試過了:if (str.matches(".*\\dst"))
和if (str.matches(".*\\d.st"))
但它不起作用。
任何幫助?
用途:
if (str.matches(".*\\dst.*"))
String#matches()
從字符串結束的開始正則表達式模式匹配。隱含的錨點^
和$
是隱含的。所以,你應該使用匹配完整字符串的模式。
或者,使用Pattern
,Matcher
和Matcher#find()
方法,在一個字符串中的任何地方,以搜索特定的圖案:
Matcher matcher = Pattern.compile("\\dst").matcher(str);
if (matcher.find()) {
// ok
}
正則表達式可用於匹配這樣的模式。例如
String str = "Friday 1st August 2013"
Pattern pattern = Pattern.compile("[0-9]+st");
Matcher matcher = pattern.matcher(str);
if(mathcer.find())
//yes
else
//no
你可以使用這個表達式:
.*?(\\d+)st.*
的?
的*
後是必要的,因爲*
是 「貪婪」(它會匹配整個字符串)。 *?
做了一個「非貪婪的」比賽。此外,該號碼可以有多個單個數字(例如「15st」)。
+1但是爲什麼提到Pattern/find?這不是必要的,它更多的代碼和更少的可讀性。你的解釋爲什麼他的比賽沒有工作,以及如何解決這個問題纔是真正的,最好的答案。 – Bohemian
@波希米亞。這將增加OP的知識:)我不會做任何傷害。 ;) –