如何从字符串中获取特定字符串(子字符串)

时间:2014-06-05 09:32:13

标签: java string split

我有像

这样的字符串
{Action}{RequestId}{Custom_21_addtion}{custom_22_substration}
{Imapact}{assest}{custom_23_multiplication}.

从这里我只想要那些包含"custom".

的子字符串

例如,从上面的字符串我只想要

{Custom_21_addtion}{custom_22_substration}{custom_23_multiplication}.

我怎么能得到这个?

4 个答案:

答案 0 :(得分:1)

您可以使用正则表达式,从{custom}。它看起来像这样:

Pattern pattern = Pattern.compile("\\{custom.*?\\}", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(inputString);

while (matcher.find()) {
    System.out.print(matcher.group());
}

自定义后的。*表示单词“custom”后面的0个或多个字符,并且问号将正则表达式限制为尽可能少的字符,这意味着它会在下一个}处断开找到。

答案 1 :(得分:0)

如果您想要一个没有正则表达式的替代解决方案:

String a = "{Action}{RequestId}{Custom_21_addtion}{custom_22_substration}{Imapact}{assest}{custom_23_multiplication}";
        String[] b = a.split("}");
        StringBuilder result = new StringBuilder();
        for(String c : b) {
            // if you want case sensitivity, drop the toLowerCase()
            if(c.toLowerCase().contains("custom"))
                result.append(c).append("}");
        }
        System.out.println(result.toString());

答案 2 :(得分:0)

你可以这样做:

StringTokenizer st = new StringTokenizer(yourString, "{");
List<String> llista = new ArrayList<String>():

Pattern pattern = Pattern.compile("(\W|^)custom(\W|$)", Pattern.CASE_INSENSITIVE);

while(st.hasMoreTokens()) {

String string  = st.nextElement();
Matcher matcher = pattern.matcher(string);
if(matcher.find()){
llista.add(string);
}

}

答案 3 :(得分:0)

另一种解决方案:

String inputString = "{Action}{RequestId}{Custom}{Custom_21_addtion}{custom_22_substration}{Imapact}{assest}" ;
String strTokens[] =  inputString.split("\\}");

for(String str: strTokens){
    Pattern pattern = Pattern.compile( "custom", Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(inputString);
    if (matcher.find()) {
        System.out.println("Tag Name:" + str.replace("{",""));
    }  
}