2017-02-07 14 views
2

文字列の形は"/A/B/C/D"です。正規表現か、これを文字列配列[/A, B, C, D]に取り込む簡単な方法はありますか?基本的には、 "/"で区切りますが区切り文字の最初のインスタンスは保持しますか?入力文字列に最初の文字として "/"が、最初の文字の後に少なくとも1つの "/"があることを保証できます。私の試みはこれまでのところ、これをされています:上記文字列を分割して最初の区切り文字を保持

private String[] customSplit(String input) { 
    if (!input.startsWith("/")) { 
     input = "/" + input; 
    } 

    String[] output = input.split("/"); 
    output[1] = "/" + output[1]; 
    return output; 
} 

がが少し不格好です(およびインデックス0の空「」スポットがある)ので、任意の提案を?

答えて

2

あなたが最初の区切りで分割を避けるために、分割での負の先読みを使用することができます。

String[] toks = "/A/B/C/D".split("(?!^)/"); 
//=> [/A, B, C, D] 

ここ(?!^)/

RegEx Demo

区切りのための開始位置をスキップします否定先読みであります
+0

このソリューションではどのようなエッジケースを検討しますか? –

+0

'/'が先頭文字であれば動作します。 – anubhava

0

汚れた溶液ですが、少なくとも動作するはずです。 文字列に少なくとも2つの要素があると仮定します。それ以外の場合は、エラー処理コードを追加する必要がありますが、書いたものからは常にそうであるはずです。

private String[] customSplit(String input) { 
    String preparedInput=input; 
    if (input.startsWith("/")) { 
     preparedInput=input.substring(1); 
    } 

    String[] output = preparedInput.split("/"); 
    output[0] = "/" + output[0]; 
    return output; 
} 
0

別の方法は次のとおりです。

private String[] customSplit(String input) { 
    String[] output = input.substring(1).split("/"); 
    output[0] = "/" + output[0]; 
    return output; 
} 
関連する問題