将字符串分成两部分

时间:2013-05-18 19:07:18

标签: java

我的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(probaby不会)或某种会搞砸我的reg表达的东西。对此有什么理论解决方案?

4 个答案:

答案 0 :(得分:2)

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

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

此外,根据您在blabla1blabla2/nameend的情况下尝试实现的目标,您可以尝试将(.*?)更改为(.+?)。< / p>

答案 1 :(得分:1)

如果字符串的格式总是如下,

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

然后以下代码就足够了,

      for (String temp: Str.split(" ", 4)){
         System.out.println(temp);
      }

答案 2 :(得分: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

希望这有帮助。

答案 3 :(得分:1)

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

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

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