2010-05-28 58 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()); 
     } 

它会给你想要的结果。

相关问题