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
}