2016-04-05 2 views
-1

Android uygulamasında çalışıyorum ve tüm yazılan metin suratlarını ifadelere dönüştürmek istiyorum.Başka bir dizenin içinde parantez içeren bir dizgi bulun

Tüm metin suratlarını Emoticon's Unicode ile listelemek için bir Hashmap hazırladım.

`

`

public static final HashMap<String, Integer> smileysMap = new HashMap<>(); 

// To add :) :-) :) :] =) 
smileysMap.put(":-\\)", 0x1f60a); 
smileysMap.put(":\\)", 0x1f60a); 
smileysMap.put(":\\]", 0x1f60a); 
smileysMap.put("=\\)", 0x1f60a) 
String statusBody = "Hello World :)"; 

Set<String> set = smileysMap.keySet(); 
for (String s1 : set) { 
     if(statusBody.contains(s1)){ 
      statusBody = statusBody.replaceAll(s1,smileysMap.get(s1)); 
     } 
} 

Ama durum if(statusBody.contains(s1)) her zaman başarısız olsun. O zaman nasıl kontrol edebilirim.

Lütfen, nasıl kontrol edileceğini bilen varsa bana yardımcı olun.

cevap

1

Hey i kodunuzu modifiye ve onun ince

public static final HashMap<String, Integer> smileysMap = new HashMap<>(); 

// To add :) :-) :) :] =) 
smileysMap.put(":-)", 0x1f60a); 
smileysMap.put(":)", 0x1f60a); 
smileysMap.put(":]", 0x1f60a); 
smileysMap.put("=)", 0x1f60a) 
String statusBody = "Hello World :)"; 

Set<String> set = smileysMap.keySet(); 
for (String s1 : set) { 
     if(statusBody.contains(s1)){ 

      statusBody = statusBody.replace(s1,"any string");    
      /*replaceAll function will give you PatternSyntaxException: Incorrectly nested parentheses in regexp pattern near index 2: :) so i used replace function instead*/ 

     } 
} 

çalışma ve bu hat için hatayı alma olasılıkları da statusBody = statusBody.replaceAll (s1, smileysMap.get (s1)); olarak değiştirin ve yöntemi 2 string argüman alıyor yerine

+0

Cevabınız için çok teşekkür ederim. Şimdi iyi çalışıyor :) –

1

Ama durum if(statusBody.contains(s1)) hep Tabii

başarısız olsun! Harita, sen anahtarları olarak bunlar var:

  • ": - \)"
  • ": \)"
  • ": \]"
  • "= \)"

bu

  • ":-)", kelimesi kelimesine dizeleri dönüşebilir "Eğer :)"
  • ":]"
  • "=)"

Şimdiye kadar iyi. Şimdi, statusBody'un bunlardan herhangi birini içerdiğini görelim. Sizin statusBody:

"Hello World :)" 

o ":-)" içeriyor mu? Ya da ":)"? Veya ":" "? Veya "=)"?

Bunların hiçbiri!

Görmek?

Sanırım doğru şeyleri haritaya eklemediniz. Demek istediniz:

  • ":-)" ":)"
  • ":]"
  • "=)"

Dolayısıyla, sadece değiştirmek put yöntemleri argümanlar ve PROBLEM ÇÖZÜM!

Kodunuzda başka bir sorun buldum. replaceAll iki dize bağımsız değişken alır, ancak ona bir dize ve bir int veriyorsunuz. Int'i önce string'e dönüştürmelisin!

+0

haritadan olduğu gibi bana indeksi 2 yakın regexp desende 'Yanlış yuvalanmış parantez aşağıdaki hatayı veriyor gibi :) ekleyemezsiniz:)' –

+0

You Orada biraz regex kullanmalı. Ancak bunu kodunuzda göstermediniz. Maddeleri ayrıştırmak için regex'e ihtiyacınız yoksa, bunu yapmayın, normal ifade kodunu kaldırın. Bu kod parçasına ihtiyacınız varsa, dizeleri kontrol ettiğinizde 'replaceAll 'öğesini çağırmanızı öneririm. Tüm \ boş dizeleriyle değiştirin. @PrithnirajNicyone – Sweeper