有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中从指定模式前后的字符串中提取子字符串

我想从字符串中提取满足所需部分前后特定模式的部分:

例如:

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

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

我现在使用的代码是

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

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

我得到的输出是:ankit kapoor//而不是ankit 马扬克·古普塔//代替马扬克 普里蒂·辛格//代替普里蒂

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


共 (1) 个答案

  1. # 1 楼答案

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

    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来找到名字,你需要模仿regex的功能,即找到第一个模式(“is”),然后沿着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