2012-02-23 32 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); 
    } 
}