I have this text file that I read into a Java application and then count the words in it line by line. Right now I am splitting the lines into words by a
String.split([\\p{Punct}\\s+])"
But I know I am missing out on some words from the text file. For example, the word "can't" should be divided into two words "can" and "t".
Commas and other punctuation should be completely ignored and considered as whitespace. I have been trying to understand how to form a more precise Regular Expression to do this but I am a novice when it comes to this so I need some help.
What could be a better regex for the purpose I have described?
This method considers the word between two spaces as one token and returns an array of words (between spaces) in the current String. Therefore, to split a string at every space and punctuation, invoke the split() method on it by passing the above specified regular expression as a parameter.
You can split a String by whitespaces or tabs in Java by using the split() method of java. lang. String class. This method accepts a regular expression and you can pass a regex matching with whitespace to split the String where words are separated by spaces.
Commas and other punctuation should be completely ignored and considered as whitespace.
You have one small mistake in your regex. Try this:
String[] Res = Text.split("[\\p{Punct}\\s]+");
[\\p{Punct}\\s]+
move the +
form inside the character class to the outside. Other wise you are splitting also on a +
and do not combine split characters in a row.
So I get for this code
String Text = "But I know. For example, the word \"can\'t\" should"; String[] Res = Text.split("[\\p{Punct}\\s]+"); System.out.println(Res.length); for (String s:Res){ System.out.println(s); }
this result
10
But
I
know
For
example
the
word
can
t
should
Which should meet your requirement.
As an alternative you can use
String[] Res = Text.split("\\P{L}+");
\\P{L}
means is not a unicode code point that has the property "Letter"
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With