我想用单斜杠替换url中的所有多个正斜杠。我尝试使用String replaceAll()
正则表达式,但它不起作用。
示例案例:
https://localhost/app//page1
应返回https://localhost/app/page1
https://localhost/app//page1//subpage1
应返回https://localhost/app/page1/subpage1
//page1//subpage1
应返回/page1/subpag1
答案 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 强>
您可以使用此 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(结果);