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.

57
demandé sur demongolem 2010-12-15 20:25:42

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));
107
répondu vitaut 2013-02-22 17:17:33

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.

37
répondu divec 2012-09-30 21:37:54

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));
5
répondu Crozin 2010-12-15 17:28:46

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

1
répondu Thulasiram 2015-09-05 05:08:37

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) ) );
        }

    }
1
répondu Razib 2015-09-06 15:46:35

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");
     }
  }
1
répondu Yoko Alpha 2017-03-06 11:37:14

Si vous avez à vérifier manuellement, vous pouvez faire int a = s.charAt(0)

Si la valeur de a est comprise entre 65 et 90, elle est en majuscules.

0
répondu 2010-12-15 17:35:39
String yourString = "yadayada";
if (Character.isUpperCase(yourString.charAt(0))) {
    // print something
} else {
    // print something else
}
0
répondu Om Prakash 2017-01-24 11:37:35