En Java, comment savoir si le premier caractère d'une chaîne est en majuscules sans regex
En Java, recherchez si le premier caractère d'une chaîne est en majuscules sans utiliser d'expressions régulières.
8 réponses
En supposant que s
n'est pas vide:
Character.isUpperCase(s.charAt(0))
Ou, comme mentionné par divec, pour le faire fonctionner pour les caractères avec des points de code ci-dessus U+FFFF
:
Character.isUpperCase(s.codePointAt(0));
En Fait, c'est plus subtil qu'il n'y paraît.
Le code ci-dessus donnerait la réponse incorrecte pour un caractère minuscule dont le point de code était au-dessus de U+FFFF (comme U+1D4C3, script mathématique SMALL n). Chaîne.charAt retournerait une paire de substitution UTF-16, qui n'est pas un personnage, mais plutôt la moitié du personnage, pour ainsi dire. Donc, vous avez à utiliser des chaînes de caractères.codePointAt, qui renvoie un int au-dessus de 0xFFFF (pas un char). Vous feriez:
Character.isUpperCase(s.codePointAt(0));
Ne vous sentez pas mal négligé cela; presque tous les codeurs Java gèrent mal UTF-16, car la terminologie vous fait penser que chaque valeur "char" représente un caractère. UTF-16 suce, car il est presque fixe largeur mais pas tout à fait. Donc, les cas de bord non à Largeur fixe ont tendance à ne pas être testés. Jusqu'à ce qu'un jour, un document arrive dans lequel contient un caractère comme U + 1D4C3, et votre système entier explose.
Il y a plusieurs façons de le faire, mais la plus simple semble être la suivante:
boolean isUpperCase = Character.isUpperCase("My String".charAt(0));
Nous pouvons également trouver une lettre majuscule en utilisant une expression régulière
private static void findUppercaseFirstLetterInString(String content) {
Matcher m = Pattern
.compile("([a-z])([a-z]*)", Pattern.CASE_INSENSITIVE).matcher(
content);
System.out.println("Given input string : " + content);
while (m.find()) {
if (m.group(1).equals(m.group(1).toUpperCase())) {
System.out.println("First Letter Upper case match found :"
+ m.group());
}
}
}
Pour un exemple détaillé . veuillez visiter http://www.onlinecodegeek.com/2015/09/how-to-determines-if-string-starts-with.html
N'oubliez pas de vérifier si la chaîne est vide ou null
. Si nous oublions de vérifier null
ou vide, nous obtiendrions NullPointerException
ou StringIndexOutOfBoundException
si une chaîne donnée est nulle ou vide.
public class StartWithUpperCase{
public static void main(String[] args){
String str1 = ""; //StringIndexOfBoundException if
//empty checking not handled
String str2 = null; //NullPointerException if
//null checking is not handled.
String str3 = "Starts with upper case";
String str4 = "starts with lower case";
System.out.println(startWithUpperCase(str1)); //false
System.out.println(startWithUpperCase(str2)); //false
System.out.println(startWithUpperCase(str3)); //true
System.out.println(startWithUpperCase(str4)); //false
}
public static boolean startWithUpperCase(String givenString){
if(null == givenString || givenString.isEmpty() ) return false;
else return (Character.isUpperCase( givenString.codePointAt(0) ) );
}
}
Assurez-vous d'abord de vérifier null et empty et ten convertit la chaîne existante en Supérieure. Utilisez S. O. P Si vous voulez voir des sorties sinon booléen comme Rabiz l'a fait.
public static void main(String[] args)
{
System.out.println("Enter name");
Scanner kb = new Scanner (System.in);
String text = kb.next();
if ( null == text || text.isEmpty())
{
System.out.println("Text empty");
}
else if (text.charAt(0) == (text.toUpperCase().charAt(0)))
{
System.out.println("First letter in word "+ text + " is upper case");
}
}
String yourString = "yadayada";
if (Character.isUpperCase(yourString.charAt(0))) {
// print something
} else {
// print something else
}