1

我的String样子是这样的:"/namestart blabla1 /nameend blabla2"。PS。例如,它也可能是/namestartblabla1/nameendbababa2

我需要将它们分成两个字符串:

string1 == blabla1
string2 == blabla2

我得到了这样的字符串:

if(mystring.startsWith("/namestart")){
    Pattern p = Pattern.compile("/namestart(.*?)/nameend");
    Matcher m = p.matcher(mystring);
    if (m.find()) {
      String string1 = m.group(1);
      String string2 = mystring.substring(mystring.indexOf("/nameend")+8, mystring.length()));
    }
}

第一个问题是可以做得更好还是这个解决方案可以?

第二个问题是 blabla1 和 blabla2 可以是任何东西,它甚至可以是 /nameend (可能不会)或者会搞砸我的 reg 表达式的东西。对此的理论解决方案是什么?

4

4 回答 4

2

我不确定您要做什么,但也许可以尝试使用groups索引而不是substring. 为了摆脱if(mystring.startsWith("/namestart")){你也可以^在你的正则表达式的star处使用anchor来指示匹配的部分也应该放在字符串的开头。

String mystring = "/namestart blabla1 /nameend blabla2";

Pattern p = Pattern.compile("^(/namestart)(.*?)(/nameend)(.*)");
Matcher m = p.matcher(mystring);
if (m.find()) {
    String string1 = m.group(2);
    String string2 = m.group(4);
    System.out.println(string1 + "|" + string2);
}

输出

 blabla1 | blabla2

还取决于您在什么情况下尝试实现的目标,blabla1或者您blabla2可以/nameend尝试更改(.*?)(.+?).

于 2013-05-18T19:27:16.067 回答
1

如果字符串的格式始终如下,

String Str = new String("/namestart blabla1 /nameend blabla2");

那么下面的代码可能就足够了,

      for (String temp: Str.split(" ", 4)){
         System.out.println(temp);
      }
于 2013-05-18T19:15:53.687 回答
1

您可以查看下面的代码以获取解决方案

public class StackOverflow {
    public static void main(String[] args) {

        String mystring = "/namestart hello /nameend test";

        if(mystring.startsWith("/namestart") && mystring.contains("/nameend")){
        System.out.println("String 1: " + mystring.substring(10, mystring.lastIndexOf("/nameend")).trim());
        System.out.println("String 2: " + mystring.substring(mystring.lastIndexOf("/nameend") + 8).trim());
        }

    }
}

我们必须假设最后一个 '/nameend' 将是姓氏的关键,因为我可以看到 mystring 也可以是 '/namestartblabla1/nameend/nameendbababa2' 这。在这里很难分辨哪个'/nameend' 是键,哪个是值。使用上面的代码你会得到

String1:blabla1/nameend String2:bababa2

希望这可以帮助。

于 2013-05-18T19:30:36.973 回答
1

最简单、最干净的方法是使用split()

String[] parts = mystring.split("\\s*/name(end|start)\\s*");
String string1 = parts[1];
String string2 = parts[2];

传递给的正则表达式split()指定使用的分隔符,因此通过在定界字符串之前和之后包含可选的空格,自动删除字符串周围的前导和尾随空格。

于 2013-05-18T19:45:01.080 回答