替换相同的字符串但具有不同的字符串值?

Replacing same strings but with different string values?

这就是问题。

(1)__ 也是一颗恒星。(2)__ 围绕太阳旋转。

edittext1: _______ edittext2: _______

所以在第一个空白处,我显示了用户在编辑文本中键入的内容。 如果他输入 Sun,那么输出将如下所示。

(1)_Sun_is也是一颗恒星。(2)__围绕太阳旋转。

edittext1: 太阳 edittext2: _______

所以对于 (1),我将用我的编辑文本值替换“__”,如上所述。 如何用 (2) 做到这一点。 我用 (2) 尝试了相同的逻辑,但它也替换了第一个值。

(1)行星也是一颗恒星。(2)行星围绕太阳旋转。

edittext1: 太阳

edittext2: 行星

public class MainActivity extends AppCompatActivity {

    EditText ed1,ed2,ed3;
    String edtv1,edtv2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ed1= (EditText) findViewById(R.id.editText);
        ed2= (EditText) findViewById(R.id.editText2);
        ed3= (EditText) findViewById(R.id.editText3);
        final TextView tv = (TextView) findViewById(R.id.textView);


        final String sentence = tv.getText().toString();


        if (ed1 != null) {
            ed1.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {

                }

                @Override
                public void afterTextChanged(Editable s) {

                    tv.setText(String.format("%s_", sentence.replace("__", "_" + s.toString())));
                }
            });
            edtv1 = ed1.getText().toString();

        }
        if (ed2 != null) {
            ed2.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                }

                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {

                }

                @Override
                public void afterTextChanged(Editable s) {

                    tv.setText(String.format("%s_", sentence.replace("__", "_" + s.toString())));
                }
            });
            edtv2 = ed2.getText().toString();

        }


    }
}

以上是完整代码

你不能。

您必须使第一个和第二个空白不同才能进行准确替换。你可以通过放置不同数量的下划线来做到这一点

String sentence = "(1)___ is also a star.(2)__ revolves around the Sun.";

sentence.replace("___", "Sun");
sentence.replace("__", "Planet");

或者您可以包含数字来区分空白

String sentence = "(1)__ is also a star.(2)__ revolves around the Sun.";

sentence.replace("(1)__", "(1)" + "Sun");
sentence.replace("(2)__", "(2)" + "Planet");
String string = "(1)__ is also a star.(2)__ revolves around the Sun.";
//First do a string split:
// then you'll have an array of strings 
String[] parts = string.split("__");

在第二个编辑文本侦听器中,您可以更改零件数组的第二个元素的结尾。 在第一个中,您可以更改第一个元素的结尾,依此类推。

要显示,只需打印出整个字符串数组即可

您可以使用以下功能:

String s = "1 abc 1 def";
Log.e("Test", replace(s, "1", "1test", "2test")); --> value: 1test abc 2test def
// fuction to replace
private String replace(String source, String toReplace, String... replacements) {
    StringBuilder stringBuilder = new StringBuilder(source);
    int startIndex = 0;
    for (int i = 0; i < replacements.length; i++) {
        int index = stringBuilder.indexOf(toReplace, startIndex);
        if (startIndex < 0) {
            break;
        }
        stringBuilder.replace(index, index + toReplace.length(), replacements[i]);
        startIndex = index + replacements.length;
    }
    return stringBuilder.toString();
}