如何替换除字符串中特定部分以外的所有字符串

时间:2019-03-20 05:41:37

标签: java regex string java-8

我有一个字符串abc____2019____5_10_40_56_20190319213500.pdf,我想替换date stamp之前的字符串。

有人可以提出建议吗?

谢谢。

3 个答案:

答案 0 :(得分:0)

  

嘿,请使用时间戳记的长度和字符串的长度来处理   这。请在下面的代码对您有帮助

 String sample = "abc____2019____5_10_40_56_20190319213500";
 int lengthOfTimestamp = 25;
 String value = sample.substring(sample.length() -lengthOfTimestamp ,sample.length());
 System.out.println("value :"+value);

输出:

value : 5_10_40_56_20190319213500

答案 1 :(得分:0)

不需要正则表达式:)只需按下划线的最后一次出现将整个字符串分割即可:

String s = "abc____2019____5_10_40_56_20190319213500.pdf";
s = s.substring(0, s.lastIndexOf("_"));

或者,如果您想在之前更换该部件,则可以使用:

String s = "abc____2019____5_10_40_56_20190319213500.pdf";
s = "replacment" + s.substring(s.lastIndexOf("_") + 1);

答案 2 :(得分:0)

这是三种简单的方法。

非正则表达式方式。只需使用_进行拆分,并使用此代码从数组中获取最后一项,

String s = "abc____2019____5_10_40_56_20190319213500.pdf";
String[] data = s.split("_");
System.out.println(data[data.length-1]);

打印

20190319213500.pdf

Regex方式更凉爽,只需一个衬里代码。替换从下到下出现的所有内容,

String s = "abc____2019____5_10_40_56_20190319213500.pdf";
System.out.println(s.replaceAll("^.*_", ""));

打印

20190319213500.pdf

find中使用Matcher方法的另一种方法是使用此代码找到最后一个数字模式,然后是直到行尾的所有非数字模式,

String s = "abc____2019____5_10_40_56_20190319213500.pdf";
Pattern p = Pattern.compile("\\d+\\D*$");
Matcher m = p.matcher(s);
if (m.find()) {
    System.out.println(m.group());
} else {
    System.out.println("Didn't find");
}

打印

20190319213500.pdf