好吧,我會總結:
測試代碼:
package com.stackoverflow.test;
import java.net.URI;
import java.net.URISyntaxException;
public class TestOfRemovingParameteresFromString {
private final static int NUMBER_OF_ITERATIONS = 1000000;
private final static String TEST_URL_SRTRING = "http://www.xyz/path1/path2/path3?param1=value1¶m2=value2";
private static String getUrlWithoutParameters(String url) throws URISyntaxException {
URI uri = new URI(url);
return new URI(uri.getScheme(), uri.getAuthority(), uri.getPath(), null, uri.getFragment()).toString();
}
public static void main(String[] args) throws URISyntaxException {
long startTime = System.currentTimeMillis();
for (int i = 0; i < NUMBER_OF_ITERATIONS; i++) {
String result = TEST_URL_SRTRING.split("\\?")[0];
}
System.out.println("Result=" + (System.currentTimeMillis() - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < NUMBER_OF_ITERATIONS; i++) {
String result = TEST_URL_SRTRING.substring(0, TEST_URL_SRTRING.indexOf("?"));
}
System.out.println("Result=" + (System.currentTimeMillis() - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < NUMBER_OF_ITERATIONS; i++) {
String result = TEST_URL_SRTRING.substring(0, TEST_URL_SRTRING.indexOf('?'));
}
System.out.println("Result=" + (System.currentTimeMillis() - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < NUMBER_OF_ITERATIONS; i++) {
String result = TEST_URL_SRTRING.substring(0, TEST_URL_SRTRING.lastIndexOf('?'));
}
System.out.println("Result=" + (System.currentTimeMillis() - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < NUMBER_OF_ITERATIONS; i++) {
String result = TEST_URL_SRTRING.replaceFirst("\\?.*$", "");
}
System.out.println("Result=" + (System.currentTimeMillis() - startTime));
startTime = System.currentTimeMillis();
for (int i = 0; i < NUMBER_OF_ITERATIONS; i++) {
String result = getUrlWithoutParameters(TEST_URL_SRTRING);
}
System.out.println("Result=" + (System.currentTimeMillis() - startTime));
}
}
輸出:
結果= 353
結果= 54
結果= 29
結果= 37
結果= 1086
結果= 1647
所以最快一個是第三:
startTime = System.currentTimeMillis();
for (int i = 0; i < NUMBER_OF_ITERATIONS; i++) {
String result = TEST_URL_SRTRING.substring(0, TEST_URL_SRTRING.indexOf('?'));
}
System.out.println("Result=" + (System.currentTimeMillis() - startTime));
的[從查詢字符串中刪除請求參數(可能重複http://stackoverflow.com/questions/24780016/remove - 請求參數的查詢字符串) – user23123412 2014-12-03 08:46:04
不,那些是關於刪除單個參數... – Maksym 2014-12-03 08:47:59