我的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表达的东西。对此有什么理论解决方案?
答案 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
此外,根据您在blabla1
或blabla2
为/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()
的正则表达式指定了使用的分隔符,因此通过在分隔字符串之前和之后包含可选的空格,字符串周围的前导和尾随空格会自动删除。