2015-10-06 168 views
0

我有一個字符串「你叫什麼名字?」在如下所示的變量中。在java中使用正則表達式分割字符串

String str="What is your name ?"; 
String[] splitString =str.split("\\is+"); 

我想在字符串中,我只希望之間那些話這樣的方式分割?。即。 yourname通過使用正則表達式

任何人都可以告訴我一些解決方案。

回答

1

你可以使用由

\\s+一個或多個空格

\\s*\\?.*?標誌與之前的所有空格以及任何字符,其餘的字符串像這樣:

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(" "); 
+0

如果'is'區分大小寫 –

+0

@AlexMan更新了我的答案。你必須用'(?i)'添加不敏感的標誌。 –

1

我會做替換和拆分。

string.replaceFirst(".*\\bis\\b\\s*(.*?)\\s*\\?.*", "$1").split("\\s+"); 
1

這個可憐的男人的解決辦法是先提取substing和使用分割最重要的是:

String substring = str.substring(str.indexOf("is")+2,str.indexOf("?")); 
String[] splitString =substring.trim().split(" "); 
+0

做子已經int和字符串參數 –

+0

好斑點,我的錯誤,糾正它。 – hotzst

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) 
+0

如何寫'str.split(「\\ is([^ \?] +)」)給出異常 –

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+意味着在大小寫不敏感之前的任何符號以及之後的所有空格。如果它會留下,我們將在分割時獲得額外的空字符串。

更換後,它分裂後

相關問題