2016-04-05 27 views
-1

Ich arbeite an Android-Anwendung und möchte alle typisierten Smileys in Emoticons konvertieren.Suchen Sie eine Zeichenfolge mit Klammern in einer anderen Zeichenfolge

Ich habe eine Hashmap vorbereitet, um alle Text-Smileys mit dem Emoticon-Unicode aufzulisten.

`

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

`

Aber die Bedingung if(statusBody.contains(s1)) immer scheitern lassen. Dann, wie kann ich es überprüfen.

Bitte helfen Sie mir, wenn jemand weiß, wie man es überprüft.

Antwort

1

Hey i modifizierte Code und seine adaequat

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*/ 

     } 
} 

und Sie werden Fehler für diese Linie auch statusBody = statusBody.replaceAll (s1, smileysMap.get (s1)) erhalten; Als ersetzen und ersetzen Methode akzeptiert 2 string Argumente

+0

Vielen Dank für Ihre Antwort. Es funktioniert jetzt gut :) –

1

Aber die Bedingung if(statusBody.contains(s1)) bekommen immer

Natürlich nicht! In der Karte, müssen Sie diese als Schlüssel:

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

Wenn Sie wenden diese in wörtlich Strings,

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

So weit so gut. Jetzt sehen wir, ob Ihre statusBody irgendwelche von diesen enthält. Ihr statusBody:

"Hello World :)" 

Enthält es ":-)"? Oder ":)"? Oder ":]"? Oder "=)"?

Keine von diesen!

Sehen Sie?

Ich denke, Sie haben nicht das richtige Zeug in die Karte hinzugefügt. Ich glaube, Sie bedeuten:

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

So ändern Sie einfach die put Methoden Argumente und PROBLEM LÖSEN!

Ich habe gerade ein anderes Problem in Ihrem Code gefunden. replaceAll nimmt zwei String-Argumente, aber Sie geben es eine Zeichenfolge und ein int. Sie sollten das int zuerst in eine Zeichenkette konvertieren!

+0

ich nicht hinzufügen kann :), wie es in der Karte ist, wie es mir die folgenden Fehler 'falsch verschachtelte Klammern in regexp Muster in der Nähe von Index 2 gibt:)' –

+0

Sie muss dort einige Regex verwenden. Aber du hast es nicht in deinem Code gezeigt. Wenn Sie keine Regex brauchen, um das Zeug zu parsen, tun Sie es nicht, entfernen Sie den Regex-Code. Wenn Sie diesen Code wirklich benötigen, rate ich Ihnen, 'replaceAll' aufzurufen, wenn Sie die Zeichenfolgen überprüfen. Ersetzen Sie alle \ durch leere Strings. @PrithnirajNicyone – Sweeper

Verwandte Themen