我有一个字符串"abcde-abc-db-tada_x12.12_999ZZZ_121121.333"
结果为999ZZZ
我尝试过使用
private static String getValue(String myString) {
Pattern p = Pattern.compile("_(\\d+)_1");
Matcher m = p.matcher(myString);
if (m.matches()) {
System.out.println(m.group(1)); // Should print 999ZZZ
} else {
System.out.println("not found");
}
}
答案 0 :(得分:9)
如果您想继续使用基于正则表达式的方法,请使用以下模式:
.*_([^_]+)_.*
这将贪婪地消耗,包括倒数第二个。然后它将消耗并捕获9999ZZZ
。
代码示例:
String name = "abcde-abc-db-tada_x12.12_999ZZZ_121121.333";
Pattern p = Pattern.compile(".*_([^_]+)_.*");
Matcher m = p.matcher(name);
if (m.matches()) {
System.out.println(m.group(1)); // Should print 999ZZZ
} else {
System.out.println("not found");
}
答案 1 :(得分:5)
使用String.split?
String given = "abcde-abc-db-tada_x12.12_999ZZZ_121121.333";
String [] splitted = given.split("_");
String result = splitted[splitted.length-2];
System.out.println(result);
答案 2 :(得分:1)
除split
外,您还可以使用substring
:
String s = "abcde-abc-db-tada_x12.12_999ZZZ_121121.333";
String ss = (s.substring(0,s.lastIndexOf("_"))).substring((s.substring(0,s.lastIndexOf("_"))).lastIndexOf("_")+1);
System.out.println(ss);
OR,
String s = "abcde-abc-db-tada_x12.12_999ZZZ_121121.333";
String arr[] = s.split("_");
System.out.println(arr[arr.length-2]);
答案 3 :(得分:0)
最后两个下划线字符之间的获取文本,首先需要找到最后两个下划线字符的索引,使用lastIndexOf
非常容易:
String s = "abcde-abc-db-tada_x12.12_999ZZZ_121121.333";
String r = null;
int idx1 = s.lastIndexOf('_');
if (idx1 != -1) {
int idx2 = s.lastIndexOf('_', idx1 - 1);
if (idx2 != -1)
r = s.substring(idx2 + 1, idx1);
}
System.out.println(r); // prints: 999ZZZ
这比使用正则表达式的任何解决方案都要快,包括使用split
。
答案 4 :(得分:-1)
由于我在第一次阅读时误解了相关代码中的逻辑,同时在使用正则表达式时出现了一些很好的答案,这是我尝试使用String类中包含的一些方法(它引入了一些变量,只是为了使它更清晰易读,当然可以用更短的方式编写):
String s = "abcde-abc-db-ta__dax12.12_999ZZZ_121121.333";
int indexOfLastUnderscore = s.lastIndexOf("_");
int indexOfOneBeforeLastUnderscore = s.lastIndexOf("_", indexOfLastUnderscore - 1);
if(indexOfLastUnderscore != -1 && indexOfOneBeforeLastUnderscore != -1) {
String sub = s.substring(indexOfOneBeforeLastUnderscore + 1, indexOfLastUnderscore);
System.out.println(sub);
}