2016-04-05 12 views
-1

私はアンドロイドアプリケーションで作業していて、すべての入力されたテキストのスマイリーを顔文字に変換したいと思っています。他の文字列の中に括弧を含む文字列を見つける

すべてのテキストスマイリーをEmoticonのUnicodeで表示するためのハッシュマップを用意しました。

`

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

`

しかし、条件if(statusBody.contains(s1))は常に失敗します。それではどうすれば確認できますか?

誰かがそれを確認する方法を知っていれば助けてください。

答えて

1

ちょっと私はあなたのコードと

その作業罰金
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*/ 

     } 
} 

を変更して、あなたはstatusBody = statusBody.replaceAll(S1、smileysMap.get(S1))も、この行のエラーになります。 として置き換えると、方法は2つの文字列引数を受け入れ置き換える

+0

ありがとうございました。今はうまくいきます:) –

1

しかし、条件if(statusBody.contains(s1))は常にもちろん

失敗を取得!マップでは、キーとしてこれらを持っている:

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

あなたはこれらは

  • ":-)"、逐語的文字列に変わる場合は ":)"
  • ":]"
  • "=)"

これまでのところは良いです。ここであなたのstatusBodyにこれらのどれかが含まれているかどうかを見てみましょう。あなたのstatusBody

"Hello World :)" 

":-)"が含まれていますか?または「:)」?または ":]"?または "=)"?

これらのいずれもありません。

を参照してください。

あなたは地図に正しいものを追加していないと思います。私はあなたが意味を考える:

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

だからput方法を変更します議論と問題は解決しました!

私はあなたのコードで別の問題を見つけました。 replaceAllは2つの文字列引数をとりますが、文字列とintを与えています。 intを文字列に変換する必要があります。

+0

それがマップ内にあるとして、それは私に、インデックス2の近くに正規表現パターンで '間違ってネストされた括弧を以下のエラーを与えるように私は:)を追加することはできません:)' –

+0

ユー正規表現を使用している必要があります。しかし、あなたはあなたのコードにそれを示していません。ものを解析する正規表現が必要ない場合は、正規表現コードを削除しないでください。必要なコードが必要な場合は、文字列をチェックするときに 'replaceAll'を呼び出すことをお勧めします。すべての\を空の文字列に置き換えます。 @PrithnirajNicyone – Sweeper

関連する問題