Şimdi Ara

String diziler ile kontrol işlemi.

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
4
Cevap
0
Favori
397
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
Öne Çıkar
0 oy
Sayfa: 1
Giriş
Mesaj
  • Selam

    Elimde bi string dizi var

     
    String[] adminPaneli = {"admin", "administrator", "text", "acp", "yonetici"};


    şeklinde

    amacım şu

    site.com/adminpaneli

    yani admin paneli listeliyorum.

    Yazdığım kodları da paylaşayım en altta bakarsınız ben derdimi açıklayayım

    ilk try blogundaki

    url = new URL(siteAdresi.getText() + "/" + adminPaneli);


    kısmında adminPaneli dizisini benim sıra ile denetmem gerekiyor ancak başaramadım.

    orayı

    url = new URL(siteAdresi.getText() + "/" + "admin");


    yaparsam eğer sitedeki admin paneli varsa buluyor

    benim sadece o kısımı düzenlemem gerekiyor bunu nasıl yapabiliriz?

    Karmaşık oldu ise diye ekran görüntüsü atıyorum daha rahat anlayacaksınız

    Bu hata aldığım hali

     String diziler ile kontrol işlemi.


    Bu da çalışan hali

     String diziler ile kontrol işlemi.


    Ahan bu da kodlar

     

    if(siteAdresi.getText().isEmpty())
    {
    JOptionPane.showMessageDialog (null, "LUTFEN SITE ADRESINIZ GIRINIZ", "HATA", JOptionPane.ERROR_MESSAGE);
    }
    else
    {
    URL url = null;
    String[] adminPaneli = {"admin", "administrator", "text", "acp", "yonetici"};

    try {

    url = new URL(siteAdresi.getText() + "/" + adminPaneli);
    } catch (MalformedURLException ex) {
    Logger.getLogger(BulucuForm.class.getName()).log(Level.SEVERE, null, ex);
    }

    HttpURLConnection connection = null;
    try {
    connection = (HttpURLConnection) url.openConnection();
    } catch (IOException ex) {
    Logger.getLogger(BulucuForm.class.getName()).log(Level.SEVERE, null, ex);
    }
    try {
    connection.setRequestMethod("GET");
    } catch (ProtocolException ex) {
    Logger.getLogger(BulucuForm.class.getName()).log(Level.SEVERE, null, ex);
    }
    try {
    connection.connect();
    } catch (IOException ex) {
    Logger.getLogger(BulucuForm.class.getName()).log(Level.SEVERE, null, ex);
    }

    int kod = 0;
    try {
    kod = connection.getResponseCode();
    } catch (IOException ex) {
    Logger.getLogger(BulucuForm.class.getName()).log(Level.SEVERE, null, ex);
    }

    if (kod == 200) {
    sonucTxt.setForeground(Color.BLACK);
    sonucTxt.setText("Sonuç:");
    siteSonucAdres.setText(url.toString());
    } else {
    sonucTxt.setForeground(Color.red);
    sonucTxt.setText("Sonuç:");
    siteSonucAdres.setText("ADMİN PANELİ BULUNAMADI");
    System.out.println(url);
    }
    }



    _____________________________




  • Merhaba,

    Diziyi kullanma şekliniz yanlış. Veriler bir dizi içerisinde saklandığı için direk adminPaneli yazarak getiremezsiniz. bunun için for döngüsünden yararlanmanız gerekiyor. Örnek bir kullanımı aşağıdaki gibidir:
    String[] adminPanelleri = {"admin", "administrator", "text", "acp", "yonetici"}; 

    for (String adminPaneli : adminPanelleri) {
    System.out.print(adminPaneli+"\n");
    }


    Kodu kendinize göre düzenleyerek kullanabilirsiniz.

    Kolay gelsin...
    _____________________________



    GreenPeace Türkiye | WWF Türkiye | Hayvan Hakları Federasyonu

    "sadece inandığın, istediğin ve doğru olduğuna inandığın bir şey için aptal durumuna düşmekten korkmazsan egonu yenebilirsin ve işte o zaman özgür kalırsın..."
  • Ben for ile aliyorum listeyi aslinda onu belirtmemisim yanlis anlatmisim. Ozel for gondusu degil sorun

    For dongusundeki ciktilari ben adres kismina entegre etmek istiyorum

    cikti soyle:

    admin
    administrator
    text
    acp
    yonetici
    http://sove.cc/yonetici

    ama burada tamamini denemiyor. en sondaki dizi elemanini atiyor oraya.

    verdiginiz koddan ornek verecek olursam

    url = new URL(siteAdresi.getText() + "/" + adminPaneli);

    buradaki adminPaneli for dongusunde alinan ciktidir. Ama ben orada diger klasor adlarini da kontrol edeyim gibi dusunun iste :)
    _____________________________
  • quote:

    Orijinalden alıntı: X-1

    Ben for ile aliyorum listeyi aslinda onu belirtmemisim yanlis anlatmisim. Ozel for gondusu degil sorun

    For dongusundeki ciktilari ben adres kismina entegre etmek istiyorum

    cikti soyle:

    admin
    administrator
    text
    acp
    yonetici
    http://sove.cc/yonetici

    ama burada tamamini denemiyor. en sondaki dizi elemanini atiyor oraya.

    verdiginiz koddan ornek verecek olursam

    url = new URL(siteAdresi.getText() + "/" + adminPaneli);

    buradaki adminPaneli for dongusunde alinan ciktidir. Ama ben orada diger klasor adlarini da kontrol edeyim gibi dusunun iste :)

    Merhaba
    Yukarıda örnek olarak verdiğiniz kod üzerinden gidiyorum


    quote:

    URL url = null;
    String[] adminPaneli = {"admin", "administrator", "text", "acp", "yonetici"};

    try {

    url = new URL(siteAdresi.getText() + "/" + adminPaneli);
    } catch (MalformedURLException ex) {
    Logger.getLogger(BulucuForm.class.getName()).log(Level.SEVERE, null, ex);
    }


    buradan url oluşturmaya çalışırken adminPaneli isimli array objesini string concatenate yapıyorsunuz, doğal olarak String[] sınıfının to string metodunu çağırıyor o da String@sdasa39 gibi birşey geliyor ve istediğinizi elde edemiyorsunuz. Sizin yapmanız gereken yukarıda arkadaşın da belirttiği gibi dizinin kendisini değil, dizinin elemanlarını kullanmanız gerekiyor. Yine belirtildiği gibi bunu da bir döngü ile halledebilirsiniz.

    Bir de eğer ilgilenirseniz code review yapıldığında hatalı kullanımlarınız var. İlk gözüme çarpanları yazıyorum.

    - siteAdresi.getText().isEmpty() -> bu kullanım hataya açık, eğer siteAdresi.getText() değeri null ise nullpointerexception atar. Bu tarz validasyonlarda commons-lang kütüphanesini kullanabilirsiniz.Örneğin StringUtils.isEmpty(siteAdresi.getText()) metodu null safe olarak içerisindeki stringin boş olup olmadığını kontrol eder.

    - String[] adminPaneli -> bu değişken bir kez tanımlanacak ve daha sonra modifiye edilmeyecekse eğer private static final olarak tanımlanmalı sınıfın başınd. Her seferinde tekrar tekrar init edilmemesi için

    - siteAdresi.getText() + "/" + adminPaneli [index] -> for döngüsü içerisinde adminPaneli arrayine ait elemanları kullandığınızı farzederek bu şekilde değiştirdim satırı. Eğer string concatenate yapıyorsanız bunu + operatörü ile yaparsanız her operasyon için yeni bir string objesi yaratılır. Yüksek yoğunluklu sistemlerde performans için zararlıdır. İhtiyacınıza göre StringBuffer ya da StringBuilder kullanmanız daha faydalıdır bunun için. Benim tercihim ise commong-lang ile beraber Gelen StringUtils.join metodu. Çok daha pratik

    - connection.setRequestMethod("GET"); -> "GET" yerine bunun tanımlı olduğu bir Enum vardır illaki bir yerlerde bunu kullanabilirsiniz.

    - Genel olarak exception handling kullanımınız pratik değil. Bütün işlemi tek bir try catch bloğu içerisinde yapıp farklı exceptionları handle edebilirsiniz tek bir yerde. Bu hem kodun okunabilirliğini arttırır hem de bakımını.

    - Logger kullanımınız hatalı. Sürekli olarak Logger init etmez yerine bu logger objesini sınıfın tepesinde private static final olarak tanımlayıp kullanmanız daha uygun. Kullandığınız log kütüphanesi nedir bilmiyorum ama log4j, slf4j gibi kütüphanelerde log metodunun içerisine seviye vermektense direk belirli seviye için log yazdırılabilir. LOGGER.debug, LOGGER.error vs. gibi. Tahminimce kullandığınız log(Level.SEVERE, null, ex); içerisinde null verdiğiniz alan exceptionMessage. Bu alanı boş bırakıp exception'ın kendisinin stackTrace'ini basmak log okunabilirliği açısından da kullanışlı değil. Exception message basmak daha mantıklı. Bir de Eğer exception handle edilmişse bunun log seviyesi SEVERE olmamalı. En kötü WARN olur. Genellikle ERROR seviyesinde yazdırılır.

    - if (kod == 200) -> hatalı değil sizin durumunuzda, kod int tipinde bir değişken ama genel pratik olarak önce değer, sonra değişkeni yazdırmak çok daha faydalı bir pratik. Mesela

    String a;

    if(a.equals("HEDE"))

    dersem eğer, nullpointerexception yerim. Ama

    if("HEDE".equals(a))

    dersem "HEDE" değeri ile null karşılaştırdığım için a değerini init etmeyi unutsam bile false değerle devam eder geçer. Bu yüzden bu pratiği alışkanlık haline getirmeniz çok daha faydalı.

    Gözüme çarpanlar bunlar, biraz vaktim vardı yazabildim umarım faydalı olur.



    < Bu mesaj bu kişi tarafından değiştirildi bestanealtcizgi -- 18 Temmuz 2013; 14:07:37 >
    _____________________________




  • Yapay Zeka’dan İlgili Konular
    Daha Fazla Göster
    
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.