我必须通过Java将字符串类型修改的xpathes转换为实xpathes;
例如;
这种xpathes
_HTML_1__BODY_1__FORM_1__INPUT_3_
应该转向
/HTML1 1/BODY1 1/FORM1 1/INPUT3 3
我不知道,你能帮帮我吗?
发布于 2014-10-10 10:33:14
就像lateralus说的,字符串是不可变的,所以你不能改变这些。
但是,尽管如此,您可以使用replaceAll返回字符串的修改版本,例如:
String input = "_HTML_1__BODY_1__FORM_1__INPUT_3_";
String output = input.replaceAll("_(\\d+)_", "[$1]").replaceAll("_", "/");
// output = /HTML[1]/BODY[1]/FORM[1]/INPUT[3]编辑
至于在这种情况下使用的正则表达式的解释:
此方法使用两个单独的正则表达式返回修改后的字符串。首先,"_(\\d+)_",查找由两个下划线字符_所包围的数字,\\d是任意数字的正则表达式短手。括号中的(...)捕获数字,以便我们可以在替换字符串中引用它。
当我们进行第一次替换时,我们用[$1]替换,在这里,$1指的是第一个捕获组,即数字捕获,并将其包围在方括号[...]中。下划线也会被删除,因为这些下划线是在表达式中捕获的,如果不在组中的话。
第二个replaceAll调用简单地用一个/替换所有剩余的下划线字符。
发布于 2014-10-10 10:33:04
使用状态机:
public static void main(String []args){
String inp = "_HTML_1__BODY_1__FORM_1__INPUT_3_";
String out = "";
int state = 0;
for (int i=0; i<inp.length(); i++) {
if (inp.charAt(i) == '_') {
switch (state) {
case 0:
out += "/";
break;
case 1:
out += "[";
break;
case 2:
out += "]";
break;
default:
throw new RuntimeException();
}
// Next state
state = (state + 1) % 3;
} else {
out += inp.charAt(i);
}
}
System.out.println(out);
// Returns "/HTML[1]/BODY[1]/FORM[1]/INPUT[3]"
}https://stackoverflow.com/questions/26297243
复制相似问题