SORU
9 Temmuz 2009, PERŞEMBE


Nasıl bir Dize Java sayısal bir tip olduğunu kontrol etmek için

Nasıl bir Dize ayrıştırma önce bir sayı olup olmadığını kontrol eder misin?

CEVAP
9 Temmuz 2009, PERŞEMBE


Bu genellikle basit bir kullanıcı tanımlı bir işlev (örneğin Roll-your-kendi "" fonksiyonu) ısnumeric. ile yapılır

Gibi bir şey

public static boolean isNumeric(String str)  
{  
  try  
  {  
    double d = Double.parseDouble(str);  
  }  
  catch(NumberFormatException nfe)  
  {  
    return false;  
  }  
  return true;  
}

Ancak, eğer sen arama bu işlev, bir sürü, ve beklediğiniz birçok çekler nedeniyle başarısız olmamak sayıda performans bu mekanizma olmayacak büyük olduğuna güvenerek istisnalar olmak için atılan her başarısızlık da oldukça pahalı bir işlem.

Alternatif bir yaklaşım, bir numara olma geçerliliğini kontrol etmek için normal bir ifade kullanabilirsiniz:

public static boolean isNumeric(String str)
{
  return str.matches("-?\\d (\\.\\d )?");  //match a number with optional '-' and decimal.
}

Latin olmayan (yani 0 9) kullanarak basamaklı başarısız olur yukarıdaki gibi Düzenli mekanizma ile dikkatli olun. Örneğin, Arapça rakamlar. Bu" normal ifadenin bir parçası sadece [0-9] ve etkili bir şekilde uluslararası alanda sayısal olarak farkında değil. maç olacak "\d çünkü (Bu işaret için OregonGhost için teşekkürler!)

Hatta başka bir alternatif Java'nın yerleşik java kullanmaktır.metin.NumberFormat, dize ayrıştırma sonra çözümleyici pozisyonu dize sonunda ise nesne. Eğer öyle ise, tüm dize sayısal varsayalım:

public static boolean isNumeric(String str)
{
  NumberFormat formatter = NumberFormat.getInstance();
  ParsePosition pos = new ParsePosition(0);
  formatter.parse(str, pos);
  return str.length() == pos.getIndex();
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ODN

    ODN

    26 Kasım 2006
  • Professor Messer

    Professor Me

    27 NİSAN 2007
  • RinconDynamic

    RinconDynami

    1 EKİM 2011