如何检查一个字符串以数字开头?

63

我有一个包含字母数字字符的字符串。

我需要检查这个字符串是否以数字开头。

谢谢,


1
嗯,你能具体说明一下吗?这些答案大多只是检查第一个字符。你想要哪种类型的数字?这些答案对负数不起作用!另外,你想要数字后面的什么...任何东西吗? - Tom
是的...你是指“数字”还是“数位”...现在我有点困惑了...每个人似乎都认为“number”意味着“digit”... ::叹气:: - Tom
这是一个很好的观点。我以为他指的是数字。如果他指的是数值,那么你肯定需要正则表达式。 - Brock Woolf
6个回答

105

7
仅为了完整性说明:isDigit返回的不仅是0到9的数字,还包括其他(例如阿拉伯语)数字:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Character.html#isDigit(char) - Csaba_H
大多数被命名为isXXX()的方法都是这样的。我认为这在方法名称中是隐含的,并且可以通过查看我提供的方法链接找到。 - Jonathan Holloway
@Csaba_H - 提醒一下:0-9是阿拉伯数字 - 不过我明白你的意思。 - McDowell

27

抱歉我没有注意到你的Java标签,只看了问题。不过我还是会把其他回答保留在这里,因为我已经打出来了。

Java

String myString = "9Hello World!";
if ( Character.isDigit(myString.charAt(0)) )
{
    System.out.println("String begins with a digit");
}

C++:

string myString = "2Hello World!";

if (isdigit( myString[0]) )
{
    printf("String begins with a digit");
}

正则表达式:

\b[0-9]

我的一些证明正则表达式有效的测试数据:除非我的测试数据有误?alt text


Brock:OP已添加了Java标签(问题中未指定)。 - shahkalpesh
也许现在我已经修正了我的回答,那个给我点踩的人会重新考虑一下吗? - Brock Woolf
1
我认为正则表达式是错误的。不是因为我在答案中提到的原因(因为我不确定我是否正确,因为它取决于OP的意图...他需要澄清),而是因为\b。 \b是一个单词边界。你想要强制字符串开头的数字,所以应该使用^。 - Tom
嗯,这个家伙是谷歌的一次性热门,显然不懂得Stackoverflow的运作方式。他回答了很多问题,却没有标记一个正确答案。我会放过他的,伙计。 - Brock Woolf
抱歉 Brock,我纠正了。我以为测试数据可能是错误的,因为如果一个字符串以空格开头,我认为那是单词边界...不过我尝试了一下,似乎工作得很好 :-)。 - Tom

11

我认为你应该使用正则表达式:


import java.util.regex.*;

public class Test {
  public static void main(String[] args) {
    String neg = "-123abc";
    String pos = "123abc";
    String non = "abc123";
        /* I'm not sure if this regex is too verbose, but it should be
         * clear. It checks that the string starts with either a series
         * of one or more digits... OR a negative sign followed by 1 or
         * more digits. Anything can follow the digits. Update as you need
         * for things that should not follow the digits or for floating
         * point numbers.
         */
    Pattern pattern = Pattern.compile("^(\\d+.*|-\\d+.*)");
    Matcher matcher = pattern.matcher(neg);
    if(matcher.matches()) {
        System.out.println("matches negative number");
    }
    matcher = pattern.matcher(pos);
    if (matcher.matches()) {
        System.out.println("positive matches");
    }
    matcher = pattern.matcher(non);
    if (!matcher.matches()) {
        System.out.println("letters don't match :-)!!!");
    }
  }
}

你也许想要调整这个函数以接受浮点数,但是这个函数可以处理负数。其他的解决方案无法处理负数,因为它们只检查第一个字符!如果你更具体地说明你的需求,我可以帮助你调整这个方法。

7
“判断第一个字符是否为数字”这个问题,使用那种复杂的解决方法有些过头了。 - skaffman
+1 这个问题含糊不清,没有指明“第一个字符是数字吗?” - Pablojim
1
@skaffman:如果你看了我的回答,很明显我并不是在回答“第一个字符是数字吗”……这也不是OP写的内容。OP问的是:“字符串以数字开头”。我试图提供一个更健壮的解决方案来处理负数。很明显问题不太清楚。(请阅读我在其他帖子上的评论)。我不确定我的答案是否真的应该被踩(虽然我不确定是不是你踩的)。此外,解决方案看起来很复杂,但实际上并不是……它主要是用于打印语句的垃圾代码,以显示它匹配的内容。 - Tom

6
这应该可以运行:
String s = "123foo";
Character.isDigit(s.charAt(0));

1
System.out.println(Character.isDigit(mystring.charAt(0));

编辑:我搜索了Java文档,查看了字符串类上的方法,可以获取第一个字符,并查看了Character类上的方法,以查看是否有检查此类事物的方法。

我认为,在提问之前,您可以做同样的事情。

EDI2:我的意思是,尝试做事情,阅读/查找,如果找不到任何东西-请问。
我在第一次发布时犯了一个错误。isDigit是Character类上的静态方法。


-2

使用正则表达式,例如^\d


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接