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

  • HuskyStarcraft

    HuskyStarcra

    4 HAZİRAN 2009
  • Neil Cicierega

    Neil Ciciere

    22 Mart 2006
  • Sarah's YouTube Channel

    Sarah's YouT

    27 Temmuz 2009