无法正确替换另一个特定字母

时间:2016-10-09 23:06:06

标签: java replace

我有一个字符串,我想用另一个字母重新编写特定的字母,我有一个json响应,其中包含用哪个字母替换的字母。

例如,我的字符串是'abh f' Json来自和将来 - a => bf,b => 423_,h => 2Re,f => AB

这是问题,当替换时,它将首先替换为bf,然后它将替换ab中的b和转换为a(bf)中的b,这将破坏整个想法,我无法来有一个好主意,我已经尝试循环抛出字符串中的每个字母但我无法循环抛出json而没有获得OutOfMemory。

任何想法?这是代码

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

3 个答案:

答案 0 :(得分:1)

您可以先用标记替换每个输入字符串,例如{i},其中i是输入的索引,然后用相应索引的输出字符串替换每个标记。

您只需要确保令牌不包含在原始字符串中,也不包含在输入/输出中。

然而,这是更容易但非常低效的。最好的方法是使用for per char迭代字符串,然后手动执行替换,即这样的事情:

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

答案 1 :(得分:1)

我认为这取决于您希望更换操作发生的次数。

如果只有一次,那很简单。您可以拆分原始字符串并对每个字符执行替换操作并最终合并结果。

但是如果你允许json中每个令牌的替换操作发生一次以上,我认为没有OOM就没有办法在没有OOM的情况下解决这个问题:

  

{a =&gt; b,b =&gt; a}

答案 2 :(得分:0)

这是第一次回答这个问题,我希望答案对你有用。我想我们可以逐个替换这封信,但不能更改初始输入。这是我的代码。

<!DOCTYPE html>
<html>
<head><title></title>
<style>
html, body {
height:100%;
}

#wrapper {
height:100%;
overflow: hidden;
}

#content {
height:100%;
}

</style>
</head>
<body>

<div id='wrapper' style='background-color:lime'>

 <div id="header">
 <p>line 1</p>
 </div>

 <div id='content' style='background-color:pink'>
 <p>line 2</p>
 <p>line 3</p>

</div>
</div>

</BODY>
</HTML>