如何找出string的第一个字符是数字?

在Java中,有一种方法可以确定一个string的第一个字符是否是一个数字?

一种方法是

string.startsWith("1") 

并一直做到9,但这似乎是非常低效的。

 Character.isDigit(string.charAt(0)) 

请注意, 这将允许任何 Unicode数字 ,不只是0-9。 你可能更喜欢:

 char c = string.charAt(0); isDigit = (c >= '0' && c <= '9'); 

或者更慢的正则expression式解决scheme:

 s.substring(0, 1).matches("\\d") // or the equivalent s.substring(0, 1).matches("[0-9]") 

但是,对于这些方法中的任何一种,首先必须确保该string不是空的。 如果是, charAt(0)substring(0, 1)将抛出一个StringIndexOutOfBoundsExceptionstartsWith没有这个问题。

要使整个条件成为一行并避免长度检查,可以将正则expression式更改为以下内容:

 s.matches("\\d.*") // or the equivalent s.matches("[0-9].*") 

如果条件没有出现在程序中的紧密循环中,那么使用正则expression式的小性能不太可能是显而易见的。

正则expression式是非常强大但昂贵的工具。 这是有效的使用它们来检查,如果第一个字符是一个数字,但它不是如此优雅:)我更喜欢这种方式:

 public boolean isLeadingDigit(final String value){ final char c = value.charAt(0); return (c >= '0' && c <= '9'); } 
 regular expression starts with number->'^[0-9]' Pattern pattern = Pattern.compile('^[0-9]'); Matcher matcher = pattern.matcher(String); if(matcher.find()){ System.out.println("true"); } 

我刚刚遇到这个问题,并认为在不使用正则expression式的解决scheme。

在我的情况下,我使用一个辅助方法:

 public boolean notNumber(String input){ boolean notNumber = false; try { // must not start with a number @SuppressWarnings("unused") double checker = Double.valueOf(input.substring(0,1)); } catch (Exception e) { notNumber = true; } return notNumber; } 

可能是一个矫枉过正,但我​​尽量避免正则expression式,只要我可以。

试试这个代码会帮助你:)

 import java.io.*; public class findDigit { public findDigit() { String line = "1Hello"; String firstLetter = String.valueOf(line.charAt(0)); //line had 0 to 5 string index char first = firstLetter.charAt(0); /* if (Character.isLetter(first)) //for alphabets if (Character.isSpaceChar(first)) //for spaces */ if (Character.isDigit(first)) // for Digits { int number = Integer.parseInt(firstLetter); System.out.println("This String has digit at first as: "+number); } else { System.out.println("This String has alphabet at first as: "+firstLetter); } } public static void main(String args[]) { new findDigit(); } }