什么是Java 1.4.2等效的Pattern.quote()

什么是Java 1.4.2等效的Pattern.quote?

我在URI上使用Pattern.quote()但现在需要使它与1.4.2兼容。

那么Pattern.quote的源代码是可用的,如下所示:

 public static String quote(String s) { int slashEIndex = s.indexOf("\\E"); if (slashEIndex == -1) return "\\Q" + s + "\\E"; StringBuilder sb = new StringBuilder(s.length() * 2); sb.append("\\Q"); slashEIndex = 0; int current = 0; while ((slashEIndex = s.indexOf("\\E", current)) != -1) { sb.append(s.substring(current, slashEIndex)); current = slashEIndex + 2; sb.append("\\E\\\\E\\Q"); } sb.append(s.substring(current, s.length())); sb.append("\\E"); return sb.toString(); } 

基本上它依赖于

 \Q Nothing, but quotes all characters until \E \E Nothing, but ends quoting started by \Q 

并且对字符串中存在\E的情况进行特殊处理。

这是引用代码:

  public static String quote(String s) { int slashEIndex = s.indexOf("\\E"); if (slashEIndex == -1) return "\\Q" + s + "\\E"; StringBuilder sb = new StringBuilder(s.length() * 2); sb.append("\\Q"); slashEIndex = 0; int current = 0; while ((slashEIndex = s.indexOf("\\E", current)) != -1) { sb.append(s.substring(current, slashEIndex)); current = slashEIndex + 2; sb.append("\\E\\\\E\\Q"); } sb.append(s.substring(current, s.length())); sb.append("\\E"); return sb.toString(); } 

似乎不是很难复制或实施自己或?

编辑:aiobee更快,sry

这是GNU Classpath实现(如果Java许可证让你担心):

  public static String quote(String str) { int eInd = str.indexOf("\\E"); if (eInd < 0) { // No need to handle backslashes. return "\\Q" + str + "\\E"; } StringBuilder sb = new StringBuilder(str.length() + 16); sb.append("\\Q"); // start quote int pos = 0; do { // A backslash is quoted by another backslash; // 'E' is not needed to be quoted. sb.append(str.substring(pos, eInd)) .append("\\E" + "\\\\" + "E" + "\\Q"); pos = eInd + 2; } while ((eInd = str.indexOf("\\E", pos)) >= 0); sb.append(str.substring(pos, str.length())) .append("\\E"); // end quote return sb.toString(); }