如何在字符串中查找单词的数字

时间:2015-11-16 17:04:23

标签: java

我试着通过下一个正则表达式找到字符串中的单词数 " [!?\ S +,._' @]"但由于某种原因,当我使用拆分方法时,它仍然以空白为单位,我不明白为什么。

以下输入:

He is a very very good boy, isn't he?

我得到:

11
He
is
a
very
very
good
boy

isn
t
he

和所需的输出:

10
He
is
a
very
very
good
boy
isn
t
he

这是我的代码:

import java.io.*;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
    public class Solution {


        public static void main(String[] args) 
        { 
          Scanner scan = new Scanner(System.in);
          String s=scan.nextLine();
            int count = 0;
          String [] tokens = s.split("[\\s+!,?._'@]");
            System.out.println(tokens.length);
            for(int i = 0; i<tokens.length;i++){
                 System.out.println(tokens[i]);
        }
       }

   }

4 个答案:

答案 0 :(得分:4)

你的正则表达式只将逗号计为一个分隔符,而不是&#34;一个逗号和空格跟在它后面#34;。此外,您唯一的+&#34;一个或多个&#34;括号内的元字符未被应用;它的字面意思在括号内解释。

+移到括号外,以便括号内的任何内容都可以作为分隔符计算一次或多次。

String[] tokens = s.split("[\\s!,?._'@]+");

这会将", "计为一个分隔符,因此输出不会在&#34; boy&#34;之间显示空白行。和&#34; isn&#34;。

答案 1 :(得分:1)

字符串title_input = $("#title").text(); title = title_input.match(/[a-z\s,äöüß-]*.*:/i); serial = title_input.match(/:\s?[a-z\s,äöüß-]*/i); title.replace(/\:/g,''); //serial = serial.replace(/[:|\.]+/g, "").trim(); $("#output_title").text(title); $("#output_serial").text(serial); 包含"He is a very very good boy, isn't he?";您的正则表达式会将此视为2个单独的匹配,一个用于", ",另一个用于','。只需在正则表达式的末尾添加' '

+

regexpal上进行了测试,得到了11场比赛而没有额外的String [] tokens = s.split("[\\s+!,?._'@]+"); 和10场比赛。

答案 2 :(得分:0)

您可以像这样使用PatternMatcher这样的字边界。我建议从拆分方法中明确指出,因为如果您不知道字符串中存在哪些分隔符,它可能会导致问题。 :

public static void main(String[] args) {
    String s = "He is a very very good boy, isn't he?";
    Pattern p = Pattern.compile("\\b[a-zA-Z]+\\b");
    Matcher m = p.matcher(s);
    int count = 0;
    while (m.find()) {
        System.out.println(m.group());
        count++;
    }
    System.out.println(count);
}

O / P:

He
is
a
very
very
good
boy
isn
t
he
10

答案 3 :(得分:0)

如果您想使用Regex,请使用PatternMatcher组合。

    String s = "He is a very very good boy, isn't he?";
    String pattern = "(\\w+'?\\w*)";
    Pattern r = Pattern.compile(pattern);
    Matcher m = r.matcher(s);

    int wordCount = 0;
    while(m.find()){
        System.out.println("Found word: " + m.group());
        wordCount++;
    }
    System.out.println("Word count: " + wordCount);

给我输出:

Found word: He
Found word: is
Found word: a
Found word: very
Found word: very
Found word: good
Found word: boy
Found word: isn't
Found word: he
Word count: 9

我使用的正则表达式是:

(\\w+'?\\w*)

\\w+匹配任何字母数字字符中的1个或多个,'?匹配0或1&#39;字符(对于像isn&t; t,不等等的单词),以及额外的\\w*在&#39;之后占用0个或更多字母数字字符。字符。可能有更好的正则表达式使用,但这对我有用。