Reputation: 455
Let's say I have a String array that contains some letters and punctuation
String letter[] = {"a","b","c",".","a"};
In letter[3] we have "."
How can I check if a string is a punctuation character? We know that there are many possible punctuation characters (,.?! etc.)
My progress so far:
for (int a = 0; a < letter.length; a++) {
if (letter[a].equals(".")) { //===>> i'm confused in this line
System.out.println ("it's punctuation");
} else {
System.out.println ("just letter");
}
}
Upvotes: 22
Views: 84438
Reputation: 4507
I have tried regex: "[\\p{Punct}]
" or "[\\p{IsPunctuation}]
" or withouth []
, it doesn't work as expected.
My string is:
How are you?
, or even "How are you?", he asked.
Then call: my_string.matches(regex);
but it seems like it only recognises if the string is only one punctuation (e.g "?
", ".
",...).
Only this regex works for me: "(.*)[\\p{P}](.*)
", it will include all preceding and proceeding characters of the punctuation because the matches()
requires to match all the sentence.
Upvotes: 1
Reputation: 31952
Do you want to check more punctuations other than just .
?
If so you can do this.
String punctuations = ".,:;";//add all the punctuation marks you want.
...
if(punctuations.contains(letter[a]))
Upvotes: 21
Reputation: 8567
Depending on your needs, you could use either
Pattern.matches("\\p{Punct}", str)
or
Pattern.matches("\\p{IsPunctuation}", str)
The first pattern matches the following 32 characters: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
The second pattern matches a whopping 632 unicode characters, including, for example: «
, »
, ¿
, ¡
, §
, ¶
, ‘
, ’
, “
, ”
, and ‽
.
Interestingly, not all of the 32 characters matched by the first pattern are matched by the second. The second pattern does not match the following 9 characters: $
, +
, <
, =
, >
, ^
, `
, |
, and ~
(which the first pattern does match).
If you want to match for any character from either character set, you could do:
Pattern.matches("[\\p{Punct}\\p{IsPunctuation}]", str)
Upvotes: 35
Reputation: 19
function has_punctuation(str) {
var p_found = false;
var punctuations = '`~!@#$%^&*()_+{}|:"<>?-=[]\;\'.\/,';
$.each(punctuations.split(''), function(i, p) {
if (str.indexOf(p) != -1) p_found = true;
});
return p_found;
}
Upvotes: -5
Reputation: 726589
Here is one way to do it with regular expressions:
if (Pattern.matches("\\p{Punct}", str)) {
...
}
The \p{Punct}
regular expression is a POSIX pattern representing a single punctuation character.
Upvotes: 66
Reputation: 773
Try this method: Character.isLetter(). It returns true if the character is a letter (a-z, uppercase or lowercase), returns false if character is numeric or symbol.
e.g. boolean answer = Character.isLetter('!');
answer will be equal to false.
Upvotes: 3