如何在Java中删除等于号('=')符号前的所有字符串文本

3

我想解析一个字符串以便构建XML文档。

我有:

String value = "path=/Some/Xpath/Here";

我已经按照这种方式解析了它:
private void parseXpath() {
    String s = "path=/Some/Xpath/Here";

    String[] tokens = s.split("/");
    for(String t: tokens){
        System.out.println(t);
    }
}

输出:

path=
Some
Xpath
Here

我该如何完全删除"path="?我只想得到xpath中的值?
编辑:
感谢回复。
如何将此方法改为返回String[]的方法,
示例:
private String[] parseXpath(String s) {

String[] tokens = s.replaceFirst(".*=", "").split("/");
   for(String t: tokens){
      System.out.println(t);
   }
   return tokens;
}

我的输出是:

[Ljava.lang.String;@413849df

我该如何使它返回一个字符串数组?

2
它已经返回了一个字符串数组,但你不能直接将其放入System.out.println(...);中,那只会打印出它的对象ID。你需要遍历数组以打印其内容。 - ChrisKo
或者使用 System.out.println(Arrays.toString(arr)) - RealSkeptic
4个回答

6

在分割之前进行替换。

String[] tokens = s.replaceFirst(".*=", "").split("/");

这会首先给你一个空元素,因为它会在替换后的第一个斜杠之后进行拆分。

或者

String[] tokens = s.replaceFirst(".*=/", "").split("/");

但是,如果你删除等号=之前的所有字符以及第一个正斜杠,就可以得到所需的输出。


将“*=”替换为“”将会用一个空行代替它,怎么可能不会有空行呢? - mosawi
".*=" 将匹配等号之前的所有字符。 - Avinash Raj
我编辑了我的问题,怎样把它变成一个返回值的方法? - mosawi
使用 Arrays.toString() 方法。 - Avinash Raj
你能详细解释一下吗?我对这方面很新。 - mosawi

3
虽然这个问题的标签是regex,但这里提供了使用substring的解决方案。
    String[] tokens = s.substring(s.indexOf("=") + 1).split("/");

或者

    String[] tokens = s.substring(s.indexOf("=/") + 1).split("/");

2

请尝试以下方法:

private void parseXpath() {
    String s = "path=/Some/Xpath/Here";
    s = s.replace("path=","");

    String[] tokens = s.split("/");
    for(String t: tokens){
        System.out.println(t);
    }
}

此外,如果您通过其他正则表达式获得path=/Some/Xpath/Here,可以完全避免删除它,使用回顾后发而不是精确匹配即可。
(?<=path=)[^\\,]*

你应该只获取 /Some/Xpath/Here

编辑:如果你想将数组打印为字符串,请使用静态方法 Arrays.toString(yourArray);


1

如果您关注性能,应避免使用split,因为它使用正则表达式,对于这样一个简单的问题来说有点过度了。 如果您只想删除"path=",并且您确定您的字符串总是以这种方式开始,那么您可以采用以下方法:

String s = "path=/Some/Xpath/Here";
String prefix = "path=";
String result = s.substring(prefix.length);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接