在java中指定模式之前和之前从字符串中提取子字符串

时间:2013-03-12 11:15:20

标签: java

我想从字符串中提取一部分,该字符串在所需部分之前和之后满足特定模式:

示例:

String [] s1 = my name is ankit kapoor , my name is mayank gupta , my name is preeti singh ;

这里我只需要第一个名字,即ankit,mayank,preeti 即在第一个空间出现之前和之后。

我到目前为止使用的代码是

String [] final_reult = s1[i].substring((s1.indexof("is")+3) , (s1.lastindexof(" ")));

显然我正在使用循环,即for(int i=o;i<s1.length;i++)

和输出im获取是:ankit kapoor //而不是ankit                            mayank gupta //而不是mayank                            preeti singh //而不是preeti

请帮忙!! 我想只使用这种格式

1 个答案:

答案 0 :(得分:0)

您可以使用简单的正则表达式轻松完成此操作:

public static void main(String[] args) {
    String[] s1 = {"my name is ankit kapoor", "my name is mayank gupta", "my name is preeti singh"};
    final Pattern pattern = Pattern.compile("is ([a-zA-Z]+) ");
    for (final String string : s1) {
        final Matcher matcher = pattern.matcher(string);
        matcher.find();
        System.out.println(matcher.group(1));
    }
}

输出:

ankit
mayank
preeti

修改

如果你想使用substring找到你需要模仿正则表达式的第一个名字,即找到第一个模式(“是”),然后沿着String走,直到找到一个空间。

public static void main(String[] args) {
    String[] s1 = {"my name is ankit kapoor", "my name is mayank gupta", "my name is preeti singh"};
    for (final String string : s1) {
        final int start = string.indexOf("is ") + 3;
        int end = start;
        for (final char c : string.substring(start).toCharArray()) {
            if (c == ' ') {
                break;
            }
            ++end;
        }
        System.out.println(string.substring(start, end));
    }
}

输出:

ankit
mayank
preeti