为什么Java将字符串放在单词之前而不是之后?

时间:2015-09-24 06:38:47

标签: java regex

来自String值的

想要在<in>

之前和之后获取单词
String ref = "application<in>rid and test<in>efd";
        int result = ref.indexOf("<in>");
        int result1 = ref.lastIndexOf("<in>");
        String firstWord = ref.substring(0, result);
        String[] wor = ref.split("<in>");
        for (int i = 0; i < wor.length; i++) {
            System.out.println(wor[i]);
        }
    }

我的预期输出

String[] output ={application,rid,test,efd}

我试过2个选项第一个IndexOf但是如果字符串有两个以上<in>我没有得到我预期的输出 第二个split它也未达到预期的输出

请建议获得该词的最佳选择(<in>之前和之后)

4 个答案:

答案 0 :(得分:4)

您可以使用如下表达式:\b([^ ]+?)<in>([^ ]+?)\b(示例here)。这应与<in>标记之前和之后的字符串匹配,并将它们分为两组。

因此,鉴于此:

    String ref = "application<in>rid and test<in>efd";
    Pattern p = Pattern.compile("\\b([^ ]+?)<in>([^ ]+?)\\b");
    Matcher m = p.matcher(ref);
    while(m.find())
        System.out.println("Prior: " + m.group(1) + " After: " + m.group(2));

收率:

Prior: application After: rid
Prior: test After: efd

或者使用split

    String[] phrases = ref.split("\\s+");
    for(String s : phrases)
        if(s.contains("<in>"))
        {
            String[] split = s.split("<in>");
            for(String t : split)
                System.out.println(t);
        }

收率:

application
rid
test
efd

答案 1 :(得分:2)

正则表达是你的朋友:)

public static void main(String args[]) throws Exception {
    String ref = "application<in>rid and test<in>efd";
    Pattern p = Pattern.compile("\\w+(?=<in>)|(?<=<in>)\\w+");
    Matcher m = p.matcher(ref);
    while (m.find()) {
        System.out.println(m.group());
    }

}

O / P:

application
rid
test
efd

答案 2 :(得分:1)

毫无疑问,使用Pattern/Matcher API匹配您需要的API对于这个问题更简单。

但是,如果您正在寻找短而快速的 String#split解决方案,那么您可以考虑:

String ref = "application<in>rid and test<in>efd";

String[] toks = ref.split("<in>|\\s+.*?(?=\\b\\w+<in>)");

<强>输出:

application
rid
test
efd

RegEx Demo

此正则表达式在<in>上分割,或者与空格匹配的模式,后跟0个字符,后跟单词<in>

答案 3 :(得分:0)

您也可以尝试以下代码,这很简单

class StringReplace1
{
    public static void main(String args[])
    {
        String ref = "application<in>rid and test<in>efd";

        System.out.println((ref.replaceAll("<in>", " ")).replaceAll(" and "," "));
        }
}