x2 = z.join(x.rsplit(y, 1))
		 
	
		
			
			var position = x.lastIndexOf(y).clamp(0, x.length);
var x2 = x.replaceFirst(y, z, position);
		 
	
		
			
			  character(len=:), allocatable :: x, x2, y, z
  k = index(x,y,back=.true.)
  if (k > 0) then
     x2 = x(1:k-1) // z // x(k+len(y):)
  else
     x2 = x
  end if
		 
	
		
			
			func replaceLast(x, y, z string) (x2 string) {
	i := strings.LastIndex(x, y)
	if i == -1 {
		return x
	}
	return x[:i] + z + x[i+len(y):]
}
		 
	
		
			
			String x2 = x;
int i = x.lastIndexOf(y);
if (i != -1) {
    String t = x2.substring(0, i);
    x2 = t + z + x2.substring(i + y.length());
}
		 
	
		
			
			StringBuilder x2 = new StringBuilder(x);
int i = x2.lastIndexOf(y);
x2.replace(i, i + y.length(), z);
		 
	
		
			
			String p = quote(y), x2;
x2 = x.replaceAll(p + "(?!.*" + p + ')', z);
		 
	
		
			
			  x2 := x;
  p := RPos(y, x);
  if (p > 0) then
  begin
    Delete(x2, p, Length(y));
    Insert(z, x2, p);
  end;
		 
	
		
			
			  x2 := ReverseString(StringReplace(ReverseString(x), ReverseString(y), ReverseString(z), []));
		 
	
		
			
			$x = 'A BB CCC this DDD EEEE this FFF';
$y = 'this';
$z = 'that';
$x2 = $x;
$pos = rindex $x, $y;
substr($x2, $pos, length($y)) = $z
    unless $pos == -1;
print $x2;
		 
	
		
			
			x2 = x.gsub(/#{y}(?!.*#{y})/, z )
		 
	
		
			
			x.rfind(y).map(|i| x.replace_range(i..(i+y.len()),z));
let x2 = x;