2010-08-26 24 views
31

) Diyelim ki {"tube", "are", "fun"} ile dolu bir dizim var ve sonra bir JTextField var ve eğer bu komutlardan birini yazıyorsam bir şey yapmak ve "Komut bulunamadı" diyen bir mesaj almak için değil.Bir dizide bir dize varsa bulun (

Java belgelerine bakmayı denedim, ancak tek alabileceğim şey, soru ve malzeme gibi istemediğim şeyler ... yani, bu nasıl yapılır? Biliyorum ki "dizide" bir fonksiyon var ama ikisini birleştirmekle pek iyi değilim.

Teşekkürler.

List<String> dan = Arrays.asList("Red", "Orange", "Yellow", "Green", "Blue", "Violet", "Orange", "Blue"); 

boolean contains = dan.contains(say.getText()); 

:

cevap

55

Bu aradığınız ne

String[] dan = {"Red", "Orange", "Yellow", "Green", "Blue", "Violet", "Orange", "Blue"}; 
boolean contains = dan.contains(say.getText()); 

ama dan.contains Sembolü bulamıyorum alıyorum: Burada

Ben bugüne kadar ne olduğu 'un tekrarlanan değerlerinin bir listesi yoksa, aynı contains yöntemini içeren bir Set<String> kullanmayı tercih edin

+0

yep! örneğimi gör. : D – nn2

+0

bir dizi kümesi –

+0

@Dan olmadığı için değil - Bzzzt - Eğer bir dizinin üzerine 'contains' çağırmak için değil bir' Set' çalışıyoruz !!! –

1

Dizide bulunan değerleri sıralanmış düzende düzenleyebiliyorsanız, Arrays.binarySearch()'u kullanabilirsiniz. Aksi halde bir döngü ve doğrusal bir arama yazmanız gerekir. Dizide büyük (birkaç düzineden fazla) dizeye sahip olmayı planlıyorsanız, bunun yerine bir Set kullanmayı düşünün.

+0

Erm, dizinin bir düzende değişip değişmeyeceğini söylemem sorun olur muydu? Daha kolay bir yolu olur mu? – nn2

+0

@Dan - Bence ilk cümlesi buna cevap veriyor. Dizeleri elle nasıl sıralayacağını biliyorsun, değil mi? –

+0

@Jim, bu cevap yanlış. # BinarySearch' 'dokümantasyonu açıkça belirtmektedir: "dizi (örneğin, dizeleri ve tamsayılar için), kendi elemanlarının doğal sipariş, dolayısıyla sonuçları bilinemez göre sıralanabilir olamaz karşılıklı karşılaştırılabilir değildir öğeler varsa." * "Integer" veya "String" üzerinde 'binarySearch 'veya en fazla kısmi bir siparişe sahip olan öğeleri KULLANMAYIN. –

28
String[] a= {"tube", "are", "fun"}; 
Arrays.asList(a).contains("any"); 
+0

teşekkürler ... harika örnek – Antonio

+0

BU benim aradığım şey. Basit! –

7

kullanımlar Arrays.asList() bir contains() yöntemi var olan bir List<String> içinde dizisinin sarılmasıdır.

Arrays.asList(dan).contains(say.getText()) 
1

test etmelidir söylemeliyim.

import java.util.stream.Stream; 

String[] stringList = {"Red", "Orange", "Yellow", "Green", "Blue", "Violet", "Orange", "Blue"}; 

boolean contains = Stream.of(stringList).anyMatch(x -> x.equals(say.getText()); 
+1

Bu en iyi cevaptır. Diğerleri başarısız çünkü "asList" parametrelenmemiş jenerik döndürür. –