将java中的字符串拆分为两部分

时间:2016-09-09 08:09:26

标签: java

我想基于子字符串拆分字符串,并获取第一部分。示例如下。

输入:

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[

6 个答案:

答案 0 :(得分:5)

String result = path1.substring(0, path1.indexOf("li[12]") + 6);

答案 1 :(得分:4)

split方法接受正则表达式。正则表达式[12]匹配一个字符12,因此会在每个12之间拆分字符串。更好的解决方案是直接搜索[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],因此在结果

中添加+6
String 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);
    }

}