使用Java替换字符串中最后出现的字符

使用Java替换字符串中最后出现的字符,java,string,replace,Java,String,Replace,我有一根这样的绳子 String s1 = "2999.1049.00_GRB.1"; String s2 = "my File.txt.txt"; 我想用“\u 1”替换最后一个“.1”,用“\u txt”替换最后一个“.txt” 字符串的结果应该是 s1 = "2999.1049.00_GRB_1" and s2 = "my File.txt_txt" 我怎样才能做到这一点。我知道要替换字符串的第一个匹配项。但不知道如何替换字符串的最后一次出现。只需使用.replace为字符串的last

我有一根这样的绳子

String s1 = "2999.1049.00_GRB.1";
String s2 = "my File.txt.txt";
我想用“\u 1”替换最后一个“.1”,用“\u txt”替换最后一个“.txt”

字符串的结果应该是

s1 = "2999.1049.00_GRB_1" and s2 = "my File.txt_txt"

我怎样才能做到这一点。我知道要替换字符串的第一个匹配项。但不知道如何替换字符串的最后一次出现。

只需使用.replace为字符串的lastIndexOf方法

System.out.println(s.replace(s.substring(s.lastIndexOf(".1"), s.length()), "_1"));
您可以使用正则表达式:

s = s.replaceAll("(.*)\\.(\\d+)$","$1_$2");  

//  (everything)point(digits) -> (everything)underscore(digits)
它将捕获一个组(
group1
)中
前面的所有元素,另一个组(
group2
)中后面的数字,并替换为:
group1\u group2

  • 第一组可以是你想要的任何东西
  • 第二组只是数字,甚至超过1

使用lastIndexOf?这个问题并没有说明你已经做了很多研究。你的问题只包含了要求,并没有说明你方面为自己解决这个问题所做的任何努力。请添加您对此问题的尝试-因为此网站不是免费的“我们为您(家庭)工作”服务。除此之外:请转到第页了解如何/问什么。谢谢您可以使用
System.out.println(“***”+s1.substring(0,s1.lastIndexOf(“.”)+“"”+s1.substring(s1.lastIndexOf(“.”+1))它将适用于
s1
s2
两个答案
类abc{public static void main(String[]args){String s1=“2999.1049.00_GRB.1”;int i=s1.lastIndexOf(“.”);StringBuilder myName=new StringBuilder(s1);myName.setCharAt(i,'.');System.out.println(myName)}
使用
lastIndexOf
替换
这个索引使用
StringBuilder
。它假设总是这样。1“我不知道这个
.1
是怎么出现在这里的,我很好奇x)根据他的需要,他总是要求的。”else可以定义一个变量使其成为动态的。您想将答案改为“.”和“uu”,例如。@GhostCat:应该如您所建议的那样。然后它将类似于:System.out.println(s.replace(s.substring(s.lastIndexOf(“.”-1,s.length()-1),“”);