⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uriutil.java

📁 是离开的肌肤了卡机是离开的就富利卡及是了的开发及拉考试及的福利科技阿斯利康的肌肤莱卡及时的离开福建阿斯顿发
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     * @param p2 URI path segment (should be encoded)     * @return Legally combined path segments.     */    public static String addPaths(String p1, String p2)    {        if (p1==null || p1.length()==0)        {            if (p1!=null && p2==null)                return p1;            return p2;        }        if (p2==null || p2.length()==0)            return p1;                int split=p1.indexOf(';');        if (split<0)            split=p1.indexOf('?');        if (split==0)            return p2+p1;        if (split<0)            split=p1.length();        StringBuffer buf = new StringBuffer(p1.length()+p2.length()+2);        buf.append(p1);                if (buf.charAt(split-1)=='/')        {            if (p2.startsWith(URIUtil.SLASH))            {                buf.deleteCharAt(split-1);                buf.insert(split-1,p2);            }            else                buf.insert(split,p2);        }        else        {            if (p2.startsWith(URIUtil.SLASH))                buf.insert(split,p2);            else            {                buf.insert(split,'/');                buf.insert(split+1,p2);            }        }        return buf.toString();    }        /* ------------------------------------------------------------ */    /** Return the parent Path.     * Treat a URI like a directory path and return the parent directory.     */    public static String parentPath(String p)    {        if (p==null || URIUtil.SLASH.equals(p))            return null;        int slash=p.lastIndexOf('/',p.length()-2);        if (slash>=0)            return p.substring(0,slash+1);        return null;    }        /* ------------------------------------------------------------ */    /** Strip parameters from a path.     * Return path upto any semicolon parameters.     */    public static String stripPath(String path)    {        if (path==null)            return null;        int semi=path.indexOf(';');        if (semi<0)            return path;        return path.substring(0,semi);    }        /* ------------------------------------------------------------ */    /** Convert a path to a cananonical form.     * All instances of "." and ".." are factored out.  Null is returned     * if the path tries to .. above its root.     * @param path      * @return path or null.     */    public static String canonicalPath(String path)    {        if (path==null || path.length()==0)            return path;        int end=path.length();                int queryIdx=path.indexOf('?');        int start = path.lastIndexOf('/', (queryIdx > 0 ? queryIdx : end));        // int start = path.lastIndexOf('/', end);    search:        while (end>0)        {            switch(end-start)            {              case 2: // possible single dot                  if (path.charAt(start+1)!='.')                      break;                  break search;              case 3: // possible double dot                  if (path.charAt(start+1)!='.' || path.charAt(start+2)!='.')                      break;                  break search;            }                        end=start;            start=path.lastIndexOf('/',end-1);        }        // If we have checked the entire string        if (start>=end)            return path;                StringBuffer buf = new StringBuffer(path);        int delStart=-1;        int delEnd=-1;        int skip=0;                while (end>0)        {            switch(end-start)            {                     case 2: // possible single dot                  if (buf.charAt(start+1)!='.')                  {                      if (skip>0 && --skip==0)                      {                             delStart=start>=0?start:0;                          if(delStart>0 && delEnd==buf.length() && buf.charAt(delEnd-1)=='.')                              delStart++;                      }                      break;                  }                                    if(start<0 && buf.length()>2 && buf.charAt(1)=='/' && buf.charAt(2)=='/')                      break;                                    if(delEnd<0)                      delEnd=end;                  delStart=start;                  if (delStart<0 || delStart==0&&buf.charAt(delStart)=='/')                  {                      delStart++;                      if (delEnd<buf.length() && buf.charAt(delEnd)=='/')                          delEnd++;                      break;                  }                  if (end==buf.length())                      delStart++;                                    end=start--;                  while (start>=0 && buf.charAt(start)!='/')                      start--;                  continue;                                case 3: // possible double dot                  if (buf.charAt(start+1)!='.' || buf.charAt(start+2)!='.')                  {                      if (skip>0 && --skip==0)                      {   delStart=start>=0?start:0;                          if(delStart>0 && delEnd==buf.length() && buf.charAt(delEnd-1)=='.')                              delStart++;                      }                      break;                  }                                    delStart=start;                  if (delEnd<0)                      delEnd=end;                  skip++;                  end=start--;                  while (start>=0 && buf.charAt(start)!='/')                      start--;                  continue;              default:                  if (skip>0 && --skip==0)                  {                      delStart=start>=0?start:0;                      if(delEnd==buf.length() && buf.charAt(delEnd-1)=='.')                          delStart++;                  }            }                             // Do the delete            if (skip<=0 && delStart>=0 && delStart>=0)            {                  buf.delete(delStart,delEnd);                delStart=delEnd=-1;                if (skip>0)                    delEnd=end;            }                        end=start--;            while (start>=0 && buf.charAt(start)!='/')                start--;        }              // Too many ..        if (skip>0)            return null;                // Do the delete        if (delEnd>=0)            buf.delete(delStart,delEnd);        return buf.toString();    }    /* ------------------------------------------------------------ */    /** Convert a path to a compact form.     * All instances of "//" and "///" etc. are factored out to single "/"      * @param path      * @return path     */    public static String compactPath(String path)    {        if (path==null || path.length()==0)            return path;        int state=0;        int end=path.length();        int i=0;                loop:        while (i<end)        {            char c=path.charAt(i);            switch(c)            {                case '?':                    return path;                case '/':                    state++;                    if (state==2)                        break loop;                    break;                default:                    state=0;            }            i++;        }                if (state<2)            return path;                StringBuffer buf = new StringBuffer(path.length());        char[] chars = path.toCharArray();        buf.append(chars,0,i);                loop2:        while (i<end)        {            char c=path.charAt(i);            switch(c)            {                case '?':                    buf.append(chars,i,end-i);                    break loop2;                case '/':                    if (state++==0)                        buf.append(c);                    break;                default:                    state=0;                    buf.append(c);            }            i++;        }                return buf.toString();    }    /* ------------------------------------------------------------ */    /**      * @param uri URI     * @return True if the uri has a scheme     */    public static boolean hasScheme(String uri)    {        for (int i=0;i<uri.length();i++)        {            char c=uri.charAt(i);            if (c==':')                return true;            if (!(c>='a'&&c<='z' ||                  c>='A'&&c<='Z' ||                  (i>0 &&(c>='0'&&c<='9' ||                          c=='.' ||                          c=='+' ||                          c=='-'))                  ))                break;        }        return false;    }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -