我想基于子字符串拆分字符串,并获取第一部分。示例如下。
输入:
body/div[2]/div[3]/div/div[1]/div/div[2]/div[2]/ul/li[12]/div/div/div/div[2]/div[2]
Ouptut:分裂为[12]
body/div[2]/div[3]/div/div[1]/div/div[2]/div[2]/ul/li[12]
我写了这段代码:
String path1 = "body/div[2]/div[3]/div/div[1]/div/div[2]/div[2]/ul/li[12]/div/div/div/div[2]/div[2]"
String result;
if(path1.contains("[12]")){
System.out.println("yes");
result = path1.split("[12]")[0];
System.out.println(result);
}
但我的结果是这样的:
body/div[
答案 0 :(得分:5)
String result = path1.substring(0, path1.indexOf("li[12]") + 6);
答案 1 :(得分:4)
split
方法接受正则表达式。正则表达式[12]
匹配一个字符1
或2
,因此会在每个1
或2
之间拆分字符串。更好的解决方案是直接搜索[12]
的出现次数:
int indexOf12 = path1.indexOf("[12]");
if(indexOf12 != -1)
{
System.out.println("yes");
String result = path1.substring(0, indexOf12 + 4);
System.out.println(result);
}
答案 2 :(得分:2)
[
字符被解释为特殊的正则表达式字符,因此您应该通过添加\\
所以替换
result = path1.split("[12]")[0];
通过
result = path1.split("\\[12]")[0];
yes
body/div[2]/div[3]/div/div[1]/div/div[2]/div[2]/ul/li
答案 3 :(得分:1)
需要在子串之后添加[12],因此在结果
中添加+6String result = path1.substring(0, path1.indexOf("li[12]")+6);
答案 4 :(得分:1)
这将解决您的问题。事情是你必须提供正则表达式分裂。不仅是字符串。
String path1 = "body/div[2]/div[3]/div/div[1]/div/div[2]/div[2]/ul/li[12]/div/div/div/div[2]/div[2]";
String result;
if(path1.contains("[12]")){
System.out.println("yes");
result = path1.split("\\[12\\]")[0];
System.out.println(result+"[12]");
}
答案 5 :(得分:1)
以下是RegEx特定方法的示例:
Matcher m = Pattern.compile("(.*\\[12\\])")
.matcher("body/div[2]/div[3]/div/div[1]/div/div[2]/div[2]/ul/li[12]/div/div/div/div[2]/div[2]");
<强>输出强>
body/div[2]/div[3]/div/div[1]/div/div[2]/div[2]/ul/li[12]
<强>代码强>
import java.util.regex.*;
import java.util.*;
public class HelloWorld {
public static void main(String[] args) {
List < String > allMatches = new ArrayList < String > ();
Matcher m = Pattern.compile("(.*\\[12\\])")
.matcher("body/div[2]/div[3]/div/div[1]/div/div[2]/div[2]/ul/li[12]/div/div/div/div[2]/div[2]");
while (m.find())
allMatches.add(m.group(1));
for (String match: allMatches)
System.out.println(match);
}
}