我有一个字符串“你叫什么名字?”在如下所示的变量中。
String str="What is your name ?";
String[] splitString =str.split("\\is+");
我想以这样的方式分割字符串,即我只想要 和?之间的字词。即。使用正则表达式
your
和name
任何人都可以告诉我一些解决方案。
答案 0 :(得分:1)
我会替换和拆分。
string.replaceFirst(".*\\bis\\b\\s*(.*?)\\s*\\?.*", "$1").split("\\s+");
答案 1 :(得分:1)
糟糕的解决办法是首先提取子基地,然后使用拆分:
String substring = str.substring(str.indexOf("is")+2,str.indexOf("?"));
String[] splitString =substring.trim().split(" ");
答案 2 :(得分:1)
您可以使用replaceFirst
,然后使用split
String str="What is your name?";
String[] splitString =str.replaceFirst(".*[[Ii][Ss]]\\s+","").split("\\s*\\?.*|\\s+");
for (int i=0; i< splitString.length; i++){
System.out.println("-"+splitString[i]);
}
删除字符串的第一部分replaceFirst
需要 What is
。正则表达式.*[[Ii][Ss]]\\s+
表示 - 不区分大小写的IS之前的任何符号以及之后的所有空格。如果它会停留,我们将在拆分时获得一个额外的空字符串。
更换后,它会通过
拆分剩下的字符串 \\s+
一个或多个空格
和
\\s*\\?.*
?
符号前面有所有空格,后面是任何字符
答案 3 :(得分:1)
您可以使用以下内容:
String str="What is your name ?";
String[] splitString = str.replaceAll(".*? is (.*) \\?", "$1").split(" ");
// [your, name]
<强> IdeOne demo 强>
更新:如果要匹配不区分大小写,只需添加不敏感标记:
String str="What is your name ?";
String[] splitString = str.replaceAll("(?i).*? is (.*) \\?", "$1").split(" ");
答案 4 :(得分:0)
使用正则表达式is([^\?]+)
并捕获第一个子组并将其拆分
这是一个稍长的方法,但是在核心Java中这是正确的方法。您可以使用正则表达式库来执行此操作
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//Later
String pattern="`is([^\?]+)"
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(str);
var words=m.group(1)