因項目須要,對內部信息化系統進行前端文件的歸檔,CSS文件歸檔,伴隨着圖像URL的變化,因系統中CSS中含url:(../UI/images/excel.jpg)之類的相對路徑。css
故此須要對此類狀況進行替換,在該功能中有三個已知的參數:前端
一、原CSS的絕對路徑java
二、CSS文件中背景圖像的URLapp
三、CSS歸檔後的絕對路徑ui
代碼以下:url
/******************************************************************************* * $Header$ * $Revision$ * $Date$ * *============================================================================== * * Copyright (c) 2001-2006 Primeton Technologies, Ltd. * All rights reserved. * * Created on 2015-2-9 *******************************************************************************/ package org.gocom.bpm.platform.test; /** * * * 2015-2-9 上午09:07:35 */ public class ImagePathMatch { public static void main(String[] args) { String src = "/eos-default/UI/style/commons.css"; String image = "../images/null.gif" ; String dest = "/eos-default/UI/archive/UI/style/commons.css"; /* * 一、獲取圖像的絕對路徑 * 二、比較源路徑和目的路徑的層次 * 三、得出最後的圖像的相對路徑 */ String[] arrSrc = src.split("/"); String[] arrImage = image.split("/"); int i=arrSrc.length,j=arrImage.length; int p = 0,q=1; StringBuilder sb = new StringBuilder(128); sb.append("/"); for(int k=0;k<j;k++){ if(arrImage[k].equals("..")){ p+=1 ; } } while((q+p*2)<i){ sb.append(arrSrc[q++]).append("/"); } while(p<j){ sb.append(arrImage[p++]); if(p<j) sb.append("/"); } System.out.println(sb.toString()); String midPath = sb.toString() ; sb.delete(0, sb.length()); String[] arrMid = midPath.split("/"); String[] arrDest = dest.split("/"); boolean flag = true ; q =0 ; while(flag){ if(arrMid[q].equals(arrDest[q])) q ++ ; else flag = false; } p = arrDest.length ; int s = q ; while(q<p){ sb.append("..").append("/"); q ++ ; } p = arrMid.length; s = s-1 ; while(s<p){ sb.append(arrMid[s++]); if(s < p) sb.append("/"); } System.out.println(sb.toString()); } }