0

「/」区切り文字を使用して jsp にいくつかの値を設定しています。値は次のようになります

<input id="newSourceDealerInput" type="hidden" value="New/<key>/<dealer>/active" name="newSourceDealerInput">

ディーラーは文字列であり、'/' を含みます。さらに言えば、任意の特殊文字です。Java の値を分離する必要があります (split("/") メソッドで行っています。

ディーラーが「/」の文字を持っている場合、どのように処理すればよいですか?

4

2 に答える 2

0

残念ながら、本番環境にJava 7がないため、ソリューションを使用できません。しかし、私は他の解決策を思いついた

 public static void main(String[] args){
    String source="Old/0123340/d/e/a-ler/busy";
    int pos1=nthOccurrence(source,'/',2);
    int pos2=nthOccurrenceFromLast(source,'/',1);
    System.out.println(source.substring(pos1+1, pos2)); 
        //gives output d/e/a-ler

    }


 public static int nthOccurrence(String str, char c, int n) {
     int pos = str.indexOf(c, 0);
     while (--n > 0 && pos != -1)
         pos = str.indexOf(c, pos+1);
     return pos;
 }

 public static int nthOccurrenceFromLast(String str, char c, int n) {
     int pos = str.lastIndexOf(c, str.length());
     while (--n > 0 && pos != -1)
         pos = str.lastIndexOf(c, pos-1);
     return pos;
 }
于 2013-05-10T11:34:05.337 に答える
0

java.text.MessageFormatクラスを使用してみてください。

String pattern="New/{0}/{1}/active";
MessageFormat mf=new MessageFormat(pattern);

Object[] values= mf.parse("New/key/dealer/active");
> results in ["key", "dealer"]      


values= mf.parse("New/key/dea/ler/active");
> results in ["key", "dea/ler"]     

このパターンは、'<key>' 要素にスラッシュがない場合にのみ機能します。

編集- 文字列の先頭部分と末尾部分も変数であるため、正規表現の使用を検討し、java.util.regexクラスを使用して値を評価する必要があります。

    String source="Old/0123340key/d/ea/le-r/busy";

    //define two alphanumeric slash-delimited blocks, 
    //followed by a named capturing group (named 'dealer')
    //and a traling alphanumeric group beginning with a slash
    String regex="(^([a-zA-Z0-9])*\\/([a-zA-Z0-9])*\\/)(?<dealer>.+)(\\/([a-zA-Z0-9])*$)";

    Pattern pat=Pattern.compile(regex);
    Matcher match=pat.matcher(source);
    String result="";
    if(match.matches()) {       
       result = match.group("dealer");
               //> returns "d/ea/le-r"
    }
于 2013-05-09T09:53:04.030 に答える