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