it-roy-ru.com

В Java, как найти, если первый символ в строке в верхнем регистре без регулярных выражений

В Java найдите первый символ в строке в верхнем регистре без использования регулярных выражений.

60
Vjy

Предполагая, что s не пусто:

Character.isUpperCase(s.charAt(0))

или, как упомянуто divec, заставить его работать для символов с кодами выше U+FFFF:

Character.isUpperCase(s.codePointAt(0));
112
vitaut

На самом деле, это тоньше, чем кажется.

Приведенный выше код даст неправильный ответ для символа нижнего регистра, кодовая точка которого была выше U + FFFF (например, U + 1D4C3, МАТЕМАТИЧЕСКИЙ СКРИПТ МАЛЫЙ N). String.charAt возвращает суррогатную пару UTF-16, которая, если можно так выразиться, является не символом, а, скорее, половиной символа. Поэтому вы должны использовать String.codePointAt, который возвращает int выше 0xFFFF (не символ). Вы бы сделали:

Character.isUpperCase (s.codePointAt (0));

Не расстраивайся, не замечая этого; почти все Java-кодеры плохо справляются с UTF-16, потому что терминология вводит в заблуждение, заставляя вас думать, что каждое значение "char" представляет символ. UTF-16 отстой, потому что это почти фиксированная ширина, но не совсем. Так что случаи Edge не фиксированной ширины, как правило, не проходят тестирование. До тех пор, пока не появится какой-нибудь документ, содержащий символ типа U + 1D4C3, и вся ваша система взорвется.

40
divec

Есть много способов сделать это, но самый простой, кажется, следующий:

boolean isUpperCase = Character.isUpperCase("My String".charAt(0));
5
Crozin

Не забудьте проверить, является ли строка пустой или null. Если мы забудем проверить null или пустое значение, то получим NullPointerException или StringIndexOutOfBoundException, если заданная строка будет нулевой или пустой. 

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
Razib

мы можем найти заглавную букву, используя регулярное выражение, а также

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

для подробного примера. пожалуйста, посетите http://www.onlinecodegeek.com/2015/09/how-to-determines-if-string-starts-with.html

1
Thulasiram

Убедитесь, что вы сначала проверили наличие пустых и пустых значений, а десять преобразует существующую строку в верхнюю. Используйте S.O.P, если хотите увидеть результаты, иначе как у Рабиза.

 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
Yoko Alpha

Если вам нужно проверить это вручную, вы можете сделать int a = s.charAt(0) 

Если значение от 65 до 90, это верхний регистр.

0
user506710
String yourString = "yadayada";
if (Character.isUpperCase(yourString.charAt(0))) {
    // print something
} else {
    // print something else
}
0
Om Prakash