我有一个这样的字符串:如何找到一个字符串包含数字后跟一个特定的字符串
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的知识:)我不会做任何伤害。 ;) –