0

我在我的jsp中使用'/'分隔符设置了一些值。该值看起来像

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

经销商是一个字符串,包含'/',任何特殊字符。我需要分隔 java 中的值(我正在通过 split("/") 方法进行操作。

经销商有“/”字符的情况如何处理?

4

2 回答 2

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 回答
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 回答