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

  • Branboy3

    Branboy3

    12 AĞUSTOS 2012
  • David Tedeyev

    David Tedeye

    20 AĞUSTOS 2011
  • George McCarron

    George McCar

    29 Mayıs 2013