替换相同的字符串但具有不同的字符串值?
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();
}
这就是问题。
(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();
}