字符串拆分并获取特定字符串

时间:2014-04-25 05:22:19

标签: java string split

我有一个字符串:

 "cards_NNS may_MD be_VB worth_JJ hundreds_NNS a_DT report_NN"

现在我试图从给定字符串中的字符串数组中获取这些单词,该字符串在单词的末尾有_NNS and _NN and _JJ

输出:

cards worth hundreds report

我的尝试:

string.split("[^_NNS]+");

请给我一些想法。

4 个答案:

答案 0 :(得分:1)

您可以在此处使用PatternMatcher

String str = "cards_NNS may_MD be_VB worth_JJ hundreds_NNS a_DT report_NN";

Matcher matcher = Pattern.compile("(\\w+?)_(?:NNS|JJ|NN)\\b").matcher(str);

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

这将找到所有那些以_NNS_JJ_NN结尾的单词序列。然后第一个捕获组捕获_之前的字符串。

答案 1 :(得分:0)

<强>码

String val = "cards_NNS may_MD be_VB worth_JJ hundreds_NNS a_DT report_NN";
String[] allVal = val.split(" ");
for(String each: allVal){
    if(each.endsWith("_NNS") || each.endsWith("_NN") || each.endsWith("_JJ")){
        System.out.println(each);
    }
}

<强>输出:

cards_NNS
worth_JJ
hundreds_NNS
report_NN

修改

<强>码

String val = "cards_NNS may_MD be_VB worth_JJ hundreds_NNS a_DT report_NN";
String[] allVal = val.split(" ");
for(String each: allVal){
    if(each.endsWith("_NNS") ){
        System.out.println(each.substring(0, each.length() - 4));
    }else if(each.endsWith("_NN") || each.endsWith("_JJ")){
        System.out.println(each.substring(0, each.length() - 3));
    }
}

<强>输出

cards
worth
hundreds
report

答案 2 :(得分:0)

如果您想在一次拆分操作中执行此操作,这将成为一个相当复杂的正则表达式。这是一种有效的方法:

String input = "cards_NNS may_MD be_VB worth_JJ hundreds_NNS a_DT report_NN";
String[] output = input.split("_(JJ|NNS?).*?(?=\\b(\\w*_(JJ|NNS?)|$))");
System.out.println(Arrays.toString(output));

打印

[cards, worth, hundreds, report]

正则表达式首先找到_JJ_NN_NNS的后缀。然后它会继续,直到找到以上述后缀之一结尾的单词或字符串的结尾($)。

答案 3 :(得分:0)

试试这个:

    String str = "cards_NNS may_MD be_VB worth_JJ hundreds_NNS a_DT report_NN";
    Pattern pattern = Pattern.compile("([^\\s]+?)_(NNS|NN|JJ)\\b");
    Matcher matcher = pattern.matcher(str);

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

输出:

  

卡片价值数百份报告