2010-05-28 89 views
1

根據我的項目,我需要將字符串分爲兩部分。在JAVA中將字符串劃分爲子字符串

下面

是例如:

String searchFilter = "(first=sam*)(last=joy*)"; 

searchFilter哪裏是一個字符串。 我想上面的字符串分割到兩個部分

first=sam*last=joy* 這樣我可以再次分裂這個變量爲first,sam*,lastjoy*按我的要求。

我沒有太多的關於java的經驗。任何人都可以幫助我實現這一目標。這將是非常有益的。

在此先感謝

回答

9

最靈活的方式可能是與正則表達式來做到這一點:

import java.util.regex.*; 

public class Test { 
    public static void main(String[] args) { 

     // Create a regular expression pattern 
     Pattern spec = Pattern.compile("\\((.*?)=(.*?)\\)"); 

     // Get a matcher for the searchFilter 
     String searchFilter = "(first=sam*)(last=joy*)"; 
     Matcher m = spec.matcher(searchFilter); 

     // While a "abc=xyz" pattern can be found... 
     while (m.find()) 
      // ...print "abc" equals "xyz" 
      System.out.println("\""+m.group(1)+"\" equals \""+m.group(2)+"\""); 
    } 
} 

輸出:

"first" equals "sam*" 
"last" equals "joy*" 
1

看看String.split(..)String.substring(..),用起來你應該能夠實現你在找什麼。

1

您可以使用splitsubstring或使用StringTokenizer來做到這一點。

0

這(未經測試的代碼段)可以做到這一點:

String[] properties = searchFilter.replaceAll("(", "").split("\)"); 
for (String property:properties) { 
    if (!property.equals("")) { 
     String[] parts = property.split("="); 
     // some method to store the filter properties 
     storeKeyValue(parts[0], parts[1]); 
    } 
} 

背後的想法:首先,我們擺脫了支架,取代了開放支架和利用收盤托架作爲分割點濾鏡的屬性。結果數組包括字符串{"first=sam*","last=joy*",""}(空字符串是猜測 - 無法在此處測試)。然後,對於每個屬性,我們再次在「=」上分割以獲取鍵/值對。

+0

我知道所有JVM的評估屬性!=「」'爲false(如上面的代碼片段所示)。 – 2010-05-28 07:01:20

+0

正如我所說 - 未經測試 - 我不確定第一次拆分是否將一個空字符串添加到數組中,因爲該字符串以「)」結尾。如果情況並非如此,那麼你提到的測試已經過時了。 – 2010-05-28 07:06:08

+0

我的意思是它**總是**返回false(在我熟悉的所有現代JVM上)。你會想使用'equals(...)'來代替。 – 2010-05-28 07:09:35

1

我認爲你可以用很多不同的方式做到這一點,它依賴於你。使用正則表達式或還有什麼 看http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html

無論如何,我建議:

int separatorIndex = searchFilter.indexOf(")("); 
String filterFirst = searchFilter.substring(1,separatorIndex); 
String filterLast = searchFilter.substring(separatorIndex+1,searchFilter.length-1); 
1

我有一個小的代碼,將解決問題烏爾

StringTokenizer st = new StringTokenizer(searchFilter, "(||)||="); 
     while(st.hasMoreTokens()){ 
      System.out.println(st.nextToken()); 
     } 

它會給你想要的結果。

相關問題