2016-10-09 21 views
1

私は文字列を持っていますが、特定の文字を別の文字に再現したいのですが、どの文字をどの文字に置き換えるかを含むjson応答があります。特定の文字を別の文字に正しく置き換えることはできません

例えば、私の文字列は 'ABH F' ある

とJSONからとなりますする - A => BF、B => 423_、H => 2RE、F => AB

は、ここで問題です、交換すると、最初にaをbfに置き換えてから、abhのbとbをa(bf)に置き換えます。これはアイデア全体を壊してしまいます。私は良いアイデアを得ることができませんでした。私は文字列から各文字をスローしてみましたが、OutOfMemoryを取得せずにjsonをループすることができませんでした。

すべてのアイデア?ここで私は入力の指標であり、その後、対応するインデックスの出力文字列ですべてのトークンを置き換える場所あなたが最初{i}のように、トークンで各入力文字列を置き換えることができ、コード

for (int i = 0; i < m_jArry.length(); i++) { 
        JSONObject jo_inside = m_jArry.getJSONObject(i); 

        String Original = jo_inside.getString("from"); 
        String To = jo_inside.getString("to"); 

         NewText = NewText.replace(" ","$"); 
         NewText = NewText.replace(Original ,To); 
       } 

答えて

1

です。

トークンが元の文字列や入力/出力に含まれていないことを確認してください。

しかし、それは簡単ですが非常に非効率です。私はそれはあなたが交換用のアクションをしたい回数に依存だと思う

String input = /* param of your method */; 

Map<Character, String> replacements = new HashMap<>(); 
// Fill map in, like replacements.put('a', "bf"); 
// Parsing the json every time could be time consuming. 
// The best structure here is a HashMap. 
// So I'd suggest that you first create it from the json and then use it whenever. 

String output = ""; 

for (char c : input.toCharArray()) { 
    if (map.containsKey(c)) { 
     output += map.get(c); 
    } else { 
     output += c; 
    } 
} 

return output; // the result is here 
+0

文字列を文字でループし、その文字がListArrayにあるかどうかをチェックします(YESの場合)。2番目のListArrayから手紙を取得して変更する方法?私は何をする必要があるのか​​理解していますが、コードは常に私を失敗させます。 – Jaeger

+0

@AboHani、私は答えを改善しました。 –

1

:最良の方法は、文字ごとのために文字列を反復処理し、手で置き換える行うことであろう、それは、このようなものです起こる

これは簡単です。元の文字列を分割し、各文字の置換処理を行い、最後に結果をマージすることができます。

しかし、あなたが許可した場合、JSON内のすべてのトークンの交換用アクションが複数回起き、私はあなたがこのようなJSONを取得するときにOOMせずに問題をresovleする方法がないと思う:

{ a => b、b => a}

0

これは初めての質問です。私は答えがあなたに役立つことを願っています。文字を1つ置き換えることはできますが、変更はできません。最初の入力。これは私のコードです。

String input = "abhf"; 
StringBuffer result = new StringBuffer(); 
for(int i = 0;i < input.length();i++) 
{ 
    char value = input.charAt(i); 
    switch(value) 
    { 
     case 'a': 
      result.append("bf"); 
      break; 
     case 'b': 
      result.append("423"); 
      break; 
     case 'h': 
      result.append("2Re"); 
      break; 
     case 'f': 
      result.append("ab"); 
      break; 
     default: 
      result.append(value); 
      break; 
    } 
} 

System.out.println(result.toString()); 
+0

あなたはポイントを逃した、私は変更する必要があるか分からない、ユーザーが "何文字を変更する"と "どの文字に変更すべきか"を選択するので、 "a"しかし、 "i"、または彼自身の言語の手紙を追加することがあります。それが私がJsonレスポンスを得る方法です、ユーザーはそれを作る、私ではありません。 – Jaeger

関連する問題