DonanımHaber Mini sürüm 2 Ocak 2026 tarihi itibariyle kullanımdan kalkacaktır. Bunun yerine daha hızlı bir deneyim için DH Android veya DH iOS uygulamalarını kullanabilirsiniz.
Arama butonu
Bu konudaki kullanıcılar: 1 misafir
3
Cevap
397
Tıklama
0
Öne Çıkarma
String diziler ile kontrol işlemi.
X
12 yıl (1116 mesaj)
Yüzbaşı
Konu Sahibi

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

< Resime gitmek için tıklayın >

Bu da çalışan hali

< Resime gitmek için tıklayın >

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



Ö
12 yıl (929 mesaj)
Yüzbaşı

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...


Bu mesaja 1 cevap geldi.
X
12 yıl (1116 mesaj)
Yüzbaşı
Konu Sahibi

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 :)


Bu mesaja 1 cevap geldi.
B
12 yıl (3069 mesaj)
Yüzbaşı

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 >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.