2012-02-23 11 views
1

文字列操作(前に「//」正確で常に文字列を確保)

私は、特定の文字列は常に“//“によって先行されることを確認します。すなわち正確に2つのフォワードスラッシュである。

ガイドライン、入力文字列に:それは、文字列内の他のスラッシュが含まれていてもよい

  • 。 (例えば、photos/comments)。
  • 先頭に0〜n個のスラッシュ(たとえば、///photos,/photosphotos//photosなど)が既に含まれている可能性があります。

EDIT

ところで:文字列が正しくフォーマットされていない場合、私は修正-それをすることがないようにしたいと思います。

+0

"/// photos"の例で何をしたいですか? –

+0

ちょうど不思議の国の国々ですが、これはディレクトリ/パストラバーサル攻撃を防ぐためのものですか? https://www.owasp.org/index.php/Path_Traversalもしそうなら、OWASPはそのような攻撃を防ぐためのガイドを持っています... – David

+0

このように '// // + myString'のように' // 'を連結することができます – Jayy

答えて

3

あなたは"//"で正規表現"^/*"を置き換えることができます:

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

これは、すべての主要な前方スラッシュを削除(もしあれば)と、文字列の先頭で、正確に2つのスラッシュを挿入します。それは文字列の先頭にない既存のスラッシュには触れません。

+0

これはこれまでの中で最も読みやすく安全な答えです – brandstaetter

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

文字列= "//" + string.replaceFirst( "^/*"、 ":前面に正確に2つのスラッシュのため

使い方を");

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); 
    } 
}