2012-02-23 62 views
1

什麼是保證以下的最佳方式:字符串操作(確保字符串總是以完全相同「//」前面)

我想確保某些字符串將永遠「//「之前。即恰好兩個向前的斜線。

準則,對輸入字符串:

  • 它可以在串內包含其他斜線; (例如photos/comments);
  • 它在開始時可能已經包含0-n個其他斜槓(例如///photos/photos,photos,//photos等)。

編輯

順便說一句:如果字符串格式不正確,我想解決,它使它。

+0

你想用它來處理「/// photos」的例子嗎? – 2012-02-23 15:40:41

+0

只是出於好奇,這是爲了防止目錄/路徑遍歷攻擊? https://www.owasp.org/index.php/Path_Traversal如果是這樣,OWASP有一個指導,以防止這種攻擊...... – David 2012-02-23 15:42:02

+0

你可以concat'//像這樣''「//」+ myString' – Jayy 2012-02-23 15:42:33

回答

3

您可以用"//"替換正則表達式"^/*"

str = str.replaceFirst("^/*", "//"); 

這將刪除所有領先的正斜槓(如果有的話),並在該字符串的開頭插入恰好兩條斜線。它不會觸及任何不在字符串開頭的現有斜槓。

+0

這是迄今爲止最可讀和最安全的答案 – brandstaetter 2012-02-23 15:43:24

0
String yourString="something"; 
yourString = !yourString.startsWith("//")?"//"+yourString:""; 
0

字符串= 「//」 + string.replaceFirst( 「^/*」,「 「);

0

沒有緩慢的正則表達式+最小的內存/娛樂開銷。

public String fix(String str) { 
    int n = 0; 
    while(n < str.length() && str.charAt(n) == '/') { ++n; } 

    switch (n) { 
     case 0: return "//" + str; 
     case 1: return "/" + str; 
     case 2: return str; 
     default: return str.substring(n - 2); 
    } 
}