我正在尝试确定字符串是否包含特定属性。
我有一个长字符串,想确定属性v_lstg_#是否包含在该字符串中,但我遇到的问题是v_lstg_#中的最后一个字符是从0-9开始的任意整数(因此是"#"),所以我的问题是我可以使用什么regex(或任何其他方法)来确定该属性是否包含在字符串中?
所以类似于:
String randomString;
randomString.contains("v_lstg_" + "some integer valued, ranged from 0 - 9, regex here")
您不希望使用contains()
。从本质上讲,这是一个正则表达式,所以使用matches()
:
boolean matches = randomString.matches(".*v_lstg_\d.*");
ETA:请求将v_lstg_
部分与其他部分分离:
String prefix = "v_lstg_";
boolean found = randomString.matches(".*"+prefix+"\d.*");
这里是另一个例子。。。使用regex Pattern和Matcher类。如果你只想要这个数字,那么你可以研究正则表达式分组来提取它。Regexes可能会变得疯狂,所以要小心。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Debug {
public static void main(String[] args) {
String s = "v_lstg_124536someotherstuff";
String regex = "(v_lstg_\d+)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
System.out.println(m.find());
System.out.println(s.subSequence(m.start(), m.end()));
}
}
这里有一个分组的例子
public static void main(String[] args) {
String s = "v_lstg_124536someotherstuff";
String regex = "(v_lstg_)(\d+)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(s);
System.out.println(m.find());
System.out.println(s.subSequence(m.start(), m.end()));
System.out.println(m.group(1));
System.out.println(m.group(2));
}
它打印
true
v_lstg_124536
v_lstg_
124536