我试着通过下一个正则表达式找到字符串中的单词数 " [!?\ 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]);
}
}
}
答案 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)
您可以像这样使用Pattern
和Matcher
这样的字边界。我建议从拆分方法中明确指出,因为如果您不知道字符串中存在哪些分隔符,它可能会导致问题。 :
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
,请使用Pattern
和Matcher
组合。
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个或更多字母数字字符。字符。可能有更好的正则表达式使用,但这对我有用。