这是我匹配字符串的代码,如:
String name = qualified.replaceAll(".*\\.(?=\\w+)", "");
从输入org.myapp.TestData$RootEntity
获取TestData$RootEntity
但是我需要能够只获得String的RootEntity
部分。有效地得到这个。
输入字符串:
com.domain.app.RootEntity
com.domain.app.TestData$RootEntity
com.domain.app.TestData$TestNested$RootEntity
应该能够获得RootEntity
答案 0 :(得分:1)
试试这个:
String name = qualified.replaceAll(".+?\\W", "");
.*\\W
匹配$
或.
之前的所有内容,并将其替换为空字符串。
答案 1 :(得分:1)
尝试使用简单的String#lastIndexOf()
String qualified = "org.myapp.TestData$RootEntity";
String name = qualified.substring(qualified.lastIndexOf('$') + 1);
完整代码
String[] values = new String[] { "com.domain.app.RootEntity",
"com.domain.app.TestData$RootEntity",
"com.domain.app.TestData$TestNested$RootEntity" };
for (String qualified : values) {
int index = qualified.lastIndexOf('$');
String name = null;
if (index != -1) {
name = qualified.substring(qualified.lastIndexOf('$') + 1);
} else {
name = qualified.substring(qualified.lastIndexOf('.') + 1);
}
System.out.println(name);
}
输出:
RootEntity
RootEntity
RootEntity
答案 2 :(得分:0)
简单:
String resultString = qualified.replaceAll("(?m).*?(RootEntity)$", "$1");
答案 3 :(得分:0)
com.domain.app.RootEntity
com.domain.app.TestData$RootEntity
com.domain.app.TestData$TestNested$RootEntity
应该能够获得
RootEntity
看起来您想删除.
或$
之后app.
或TestData$
的名称的每个部分。
如果是这种情况,您可以尝试
replaceAll("\\w+[.$]", "")
演示
String[] data = {
"com.domain.app.RootEntity",
"com.domain.app.TestData$RootEntity",
"com.domain.app.TestData$TestNested$RootEntity",
};
for (String s:data)
System.out.println(s.replaceAll("\\w+[.$]", ""));
输出:
RootEntity
RootEntity
RootEntity