如何找出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)
将抛出一个StringIndexOutOfBoundsException
。 startsWith
没有这个问题。
要使整个条件成为一行并避免长度检查,可以将正则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(); } }