我在jsp中使用'/'分隔符设置了一些值。该值看起来像
<input id="newSourceDealerInput" type="hidden" value="New/<key>/<dealer>/active" name="newSourceDealerInput">
经销商是一个字符串并包含'/',就此而言任何特殊字符。我需要分离java中的值(我通过split(“/”)方法进行分析。
我应该如何处理经销商有“/”字符的情况?
答案 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;
}