2009-08-03 7 views
103

In Java gibt es eine Möglichkeit herauszufinden, ob das erste Zeichen einer Zeichenkette eine Zahl ist?Wie finde ich heraus, ob das erste Zeichen einer Zeichenkette eine Zahl ist?

Eine Möglichkeit ist

string.startsWith("1") 

und tut das vor allem die Art und Weise bis 9, aber das scheint sehr ineffizient.

+10

ich die Regex Art und Weise erwähnen würde, aber ich hatte Angst, dass wenn ich es täte, würden Sie es zu versuchen versucht. –

Antwort

250
Character.isDigit(string.charAt(0)) 

Beachten Sie, dass this will allow any Unicode digit, nicht nur 0-9. Sie könnten es vorziehen:

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

Oder die langsamen regex Lösungen:

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

jedoch mit jedem dieser Methoden, müssen Sie zuerst sicher sein, dass die Zeichenfolge nicht leer sind. Wenn dies der Fall ist, wird charAt(0) und substring(0, 1) einen StringIndexOutOfBoundsException werfen. startsWith hat dieses Problem nicht.

Um die gesamte Zustand einer Zeile zu machen und Länge Kontrollen zu vermeiden, können Sie die regulären Ausdrücke an folgenden verändern können:

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

Wenn die Bedingung in einer engen Schleife nicht erscheint Hit in Ihrem Programm, der kleinen Leistung Es ist nicht wahrscheinlich, dass die Verwendung von regulären Ausdrücken wahrnehmbar ist.

+0

wow. Leute lieben es, dich zu erhöhen :) Danke für die Antwort. – Omnipresent

+11

Warum nicht? Es ist richtig * zweimal *. :) (Übrigens würde ich dich ermutigen, mehr zu wählen; das Voting ist ein integraler Bestandteil dieser Seite. Ich sehe, dass du 41 Beiträge hast, aber nur 19 in 7 Monaten.) –

+0

Ha, ich gebe dir eine halbe Stimme für jedes Mal, wenn du Recht hast. – jjnguy

0
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"); 
} 
+2

Sie brauchen das' {1,1} 'Suffix nicht , was bedeutet, dass "das vorhergehende Muster zwischen 1 und 1 Mal erscheinen muss". Dies bedeutet genau dasselbe wie das Muster selbst. –

+0

Diese Lösung funktioniert nicht, da String.matches und Pattern API versucht, die vollständige Zeichenfolge und nicht nur das erste Zeichen –

8

Reguläre Ausdrücke sind sehr stark, aber teures Werkzeug. Es gilt sie für die Prüfung zu verwenden, wenn das erste Zeichen eine Ziffer ist, aber es ist nicht so elegant :) Ich ziehe es auf diese Weise:

public boolean isLeadingDigit(final String value){ 
    final char c = value.charAt(0); 
    return (c >= '0' && c <= '9'); 
} 
+10

1) "Funktion" ist nicht Java. 2) Dies erlaubt nur arabische Ziffern, nicht Chinesisch, Indisch, etc. Das könnte sein, was Sie bevorzugen, aber es ist nicht in der Frage angegeben. 3) Ich habe diese genaue Lösung bereits in meiner Antwort vor vier Jahren behandelt. –

0

ich auf diese Frage nur kam und dachte an mit einer Lösung beitragen, das tut Regex nicht verwenden.

In meinem Fall verwende ich eine Hilfsmethode:

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

Wahrscheinlich zuviel des Guten, aber ich versuche regex zu vermeiden, wann immer ich kann.

0

Versuchen dieser Code wird Ihnen helfen :)

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