我有一個字符串「你叫什麼名字?」在如下所示的變量中。在java中使用正則表達式分割字符串
String str="What is your name ?";
String[] splitString =str.split("\\is+");
我想在字符串中,我只希望之間是和那些話這樣的方式分割?。即。 your
和name
通過使用正則表達式
任何人都可以告訴我一些解決方案。
我有一個字符串「你叫什麼名字?」在如下所示的變量中。在java中使用正則表達式分割字符串
String str="What is your name ?";
String[] splitString =str.split("\\is+");
我想在字符串中,我只希望之間是和那些話這樣的方式分割?。即。 your
和name
通過使用正則表達式
任何人都可以告訴我一些解決方案。
你可以使用由
\\s+
一個或多個空格
和
\\s*\\?.*
的?
標誌與之前的所有空格以及任何字符,其餘的字符串像這樣:
String str="What is your name ?";
String[] splitString = str.replaceAll(".*? is (.*) \\?", "$1").split(" ");
// [your, name]
更新:如果你想匹配不區分大小寫,只需添加不敏感的標誌:
String str="What is your name ?";
String[] splitString = str.replaceAll("(?i).*? is (.*) \\?", "$1").split(" ");
我會做替換和拆分。
string.replaceFirst(".*\\bis\\b\\s*(.*?)\\s*\\?.*", "$1").split("\\s+");
這個可憐的男人的解決辦法是先提取substing和使用分割最重要的是:
String substring = str.substring(str.indexOf("is")+2,str.indexOf("?"));
String[] splitString =substring.trim().split(" ");
做子已經int和字符串參數 –
好斑點,我的錯誤,糾正它。 – hotzst
使用正則表達式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)
如何寫'str.split(「\\ is([^ \?] +)」)給出異常 –
您可以使用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'區分大小寫 –
@AlexMan更新了我的答案。你必須用'(?i)'添加不敏感的標誌。 –