Java

2016-11-23 21 views
9

değerler kümesindeki bir desen bulma Java dizeleri listesinde bir ortak desen ayıklamak için bir yolu var mı? Biz değerler listesi varsaJava

Örneğin,: '-', daha sonra bir L harfi ve son olarak bir sayısal karakteri

001-L1 
002-L2 
003-L3 
004-L4 
... 

biz 3digits sahip olduğunu anlamak için bir yol takip var mı?

Sanırım ortak alt dizelerle veya bunun gibi bir şeyle ilgisi var ama henüz bir şey bulamadım.

Teşekkür ederiz!

DÜZENLEME: Açıkçası mükemmel bir tanıma olmaz, yalnızca verilere dayalı bir öneride bulunur.

Oluşturmaya çalıştığım şey this'a yakın bir şeydir. Videoda, kullanıcı sütunu tıkladığında, verileri ":" üzerinde bölmek için bir öneri vardır.

+0

desen herhangi bir şey olabilir ???? –

+0

Sayısal rakamları veya neyi ayıklamanız gerekiyor? – skrtbhtngr

+4

* "kes" *? Yapay zeka gibi mi demek istiyorsun? – UnholySheep

cevap

4

Bir dizi dizenin ortak olabileceği deseni "sonuçtan çıkarmak" ve bunları normal ifadelerle doğrulamamak isteyebileceğinizi düşünüyorum. Bu problem örüntü tanıma ait olabilir.

  • Önce sen, senin dizeleri herhangi ikisine Longest Common Substring (değil En Uzun Ortak Altdizi) algoritması uygulayabilirsiniz. Eğer bunu dikkat çekmek gerekir böylece dizeleri listenize göre sen, iki uzun ortak alt dizeleri 00 ve -L almak unutmayın.
  • Sonuç olarak, bir ortak alt tabaka elde ettiğinizde, diğer dizelerdeki deseni denetlemek için contains() yöntemini kullanın.

Bu yöntem, yalnızca dizeler arasındaki ortak desen en az birkaç karakter olduğunda işe yarar.

DÜZENLEME:

Size verilen videoda gibi bir şey uygulamak istiyorsanız

, sadece belli bir sınırlayıcı dayalı dizeleri bölmek gerekir. Kolay ve naif yaklaşım:

  • belli sınırlayıcı oluşması için :, ., -, ,, :: vb
  • Arama tüm senin dizeleri gibi, olası sınırlayıcı bir listesini oluşturun. dizeleri ortak veri değerlerini olabilir gibi LCS algoritması sınırlayıcı olarak amaçlanmamıştır hangi ("Evet" ve "Hayır" videoda olarak benzeri) işe yaramaz.
  • split dizeleri sınırlayıcı dayanarak, (hatta çoğu veya) dizeleri tüm bulunursa!

Bundan daha uygun çözümler olabilir!

+0

Evet, sorunun üstesinden gelmenin bir yolu budur. Tam olarak aradığım desen tanıma, ama bana yardımcı olabilecek hiçbir şey bulamadım. Dize en az birkaç karakter olduğunda, yöntem neden daha iyi çalışır? Yukarıdaki örnek için, tüm dizeler için -L'yi alamayız (tüm değerlerin bu şekilde oluşturulduğunu varsayarsak)? –

+1

Dizelerinizde tek bir karakter varsa, ortak desen olarak '-' gibi, LCS algoritması bunu bulmakta güçlük çekebilir çünkü ilk önce "00" algılanır. '-L 'iyi çalışır ama algoritma' 012-L4 've' 001-L5 'gibi iki dizgiye girdi vermeniz gerekebilir, böylece ** sadece ** bir en uzun ortak alt dizgedir (' -L') . – skrtbhtngr

+0

Düzenlemeyi orijinal gönderide kontrol et, ne yapmaya çalıştığımı gösterebilir. Ve evet, elbette veriler yukarıdaki 4 değerle sınırlı değildir, liste oldukça uzundur ve sonra -L şablonunu bulabiliriz. –