用一个斜杠替换url中的所有正斜杠

时间:2015-04-16 15:39:34

标签: java regex string

我想用单斜杠替换url中的所有多个正斜杠。我尝试使用String replaceAll()正则表达式,但它不起作用。

示例案例:

  1. https://localhost/app//page1应返回https://localhost/app/page1
  2. https://localhost/app//page1//subpage1应返回https://localhost/app/page1/subpage1
  3. //page1//subpage1应返回/page1/subpag1

4 个答案:

答案 0 :(得分:4)

您无需为此推出自己的解决方案。 Java提供了使用URI和URL的类。

import java.net.URI;
import java.net.URISyntaxException;

public class URLTest {
    private static final String VICTIM = "https://localhost/app//page1//subpage1";
    public static void main(String[] args) throws URISyntaxException {
        URI uri = new URI(VICTIM);
        System.out.println("before: " + uri);
        uri = uri.normalize();
        System.out.println("after:  " + uri);
    }
}

输出:

before: https://localhost/app//page1//subpage1
after:  https://localhost/app/page1/subpage1

答案 1 :(得分:3)

您可以像这样使用带有lookbehind的正则表达式:

(?<!https:)\/\/

只有在//之前不存在时才会删除https:

<强> Working demo

enter image description here

您可以使用此 java 代码:

String url = "https://localhost/app//page1".replaceAll("(?<!https:)\\/\\/", "/");
System.out.println(url);

答案 2 :(得分:1)

您必须分配返回值:

url = url.replaceAll("//*","/");

此方法不直接对传递的字符串起作用。它返回带有替换部件的新字符串。

答案 3 :(得分:0)

你可以尝试这个

字符串值=&#34; https://localhost/app//page1&#34 ;;

String result = value.replaceAll(&#34;(//)&#34;,&#34; /&#34;));

的System.out.println(结果);