在Java中,如何在没有正则表达式的情况下查找字符串中的第一个字符是不是为大写
Posted
技术标签:
【中文标题】在Java中,如何在没有正则表达式的情况下查找字符串中的第一个字符是不是为大写【英文标题】:In Java, how to find if first character in a string is upper case without regex在Java中,如何在没有正则表达式的情况下查找字符串中的第一个字符是否为大写 【发布时间】:2011-05-26 01:46:37 【问题描述】:在Java中,不使用正则表达式,查找字符串中的第一个字符是否为大写。
【问题讨论】:
【参考方案1】:假设s
非空:
Character.isUpperCase(s.charAt(0))
或者,如 diec 所述,使其适用于代码点高于 U+FFFF
的字符:
Character.isUpperCase(s.codePointAt(0));
【讨论】:
【参考方案2】:实际上,这比看起来更微妙。
对于代码点高于 U+FFFF 的小写字符(例如 U+1D4C3,MATHEMATICAL SCRIPT SMALL N),上面的代码会给出不正确的答案。 String.charAt 将返回一个 UTF-16 代理对,它不是一个字符,而是一半的字符,可以这么说。所以你必须使用String.codePointAt,它返回一个大于0xFFFF的int(不是char)。你会这样做:
Character.isUpperCase(s.codePointAt(0));
忽略这一点不要难过;几乎所有 Java 编码器都对 UTF-16 处理得不好,因为该术语会误导您认为每个“char”值都代表一个字符。 UTF-16 很烂,因为它几乎是固定宽度,但并不完全。所以非固定宽度的边缘情况往往不会得到测试。直到有一天,一些包含像 U+1D4C3 这样的字符的文档进来了,然后你的整个系统就炸了。
【讨论】:
你们是怎么知道这一切的。我的意思是,你从哪里学到这些东西。一般来说,编程课程没有这些深奥的知识。【参考方案3】:有很多方法可以做到这一点,但最简单的似乎是以下一种:
boolean isUpperCase = Character.isUpperCase("My String".charAt(0));
【讨论】:
【参考方案4】:不要忘记检查字符串是否为空或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) ) );
【讨论】:
【参考方案5】:确保您首先检查 null 和空,然后十将现有字符串转换为大写字符串。如果想像 Rabiz 那样查看输出布尔值,请使用 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");
【讨论】:
【参考方案6】:如果你必须手动检查,你可以int a = s.charAt(0)
如果 a 的值在 65 到 90 之间,则为大写。
【讨论】:
非ASCII字符呢?【参考方案7】:我们也可以使用正则表达式查找大写字母
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
【讨论】:
【参考方案8】:String yourString = "yadayada";
if (Character.isUpperCase(yourString.charAt(0)))
// print something
else
// print something else
【讨论】:
以上是关于在Java中,如何在没有正则表达式的情况下查找字符串中的第一个字符是不是为大写的主要内容,如果未能解决你的问题,请参考以下文章