处理分隔文本的最佳方法是什么(jsp / java)

时间:2013-05-09 09:29:49

标签: jsp java-ee

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

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

经销商是一个字符串并包含'/',就此而言任何特殊字符。我需要分离java中的值(我通过split(“/”)方法进行分析。

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

2 个答案:

答案 0 :(得分: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"]     

此模式仅在'&lt; key&gt;'时有效元素没有斜线。

编辑 - 由于字符串的开头和尾部也是变量,您应该考虑使用正则表达式,并使用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"
    }

答案 1 :(得分: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;
 }