我正在创建一个应用程序,这样当用户输入一个词并按下按钮时,TextView
会根据某些规则显示一个新词。就像如果单词中有字母“a”,则将其更改为“.-”(摩尔斯电码)。
示例:输入单词:“abba” 输出:“.--....--...” ( a=".-"b="-...")
我创建了一个演示应用程序,其中只有“a”和“b”的 2 个规则。如果我只输入一个字母,它会起作用,但当我输入更多类似“ab”的字符时,它会出现错误。
Java 文件:
public class MainActivity extends AppCompatActivity {
EditText vpis;
TextView rezultat;
Button pretvori;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vpis = (EditText) findViewById(R.id.tekst);
rezultat = (TextView) findViewById(R.id.rezultat);
pretvori = (Button) findViewById(R.id.gumb);
pretvori.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String morse = vpis.getText().toString();
for (int i=0; i<morse.length(); i++){
if(morse.charAt(i) == 'a'){
rezultat.setText(".-");
}else if (morse.charAt(i) == 'b'){
rezultat.setText("-...");
}
}
}
});
}
}
提前致谢。
最佳答案
您的逻辑有问题 - 您总是每次都使用 setText()
覆盖文本,这就是为什么只有最后一个值在 TextView
中可见。您需要附加结果并在循环结束时将文本设置到您的 TextView
。这样做:
String morse = vpis.getText().toString();
String text = "";
for (int i=0; i<morse.length(); i++){
if(morse.charAt(i) == 'a'){
text+=".-";
}else if (morse.charAt(i) == 'b'){
text+="-...";
}
}
rezultat.setText(text);
如果你想要稍微好一点的性能,可以考虑使用StringBuilder StringBuffer而不是 String,因为 Strings
是 immutable 并且每次连接实际上都会生成一个新的 String
。
使用 StringBuilder 它看起来像这样:
StringBuilder sb = new StringBuilder();
而不是 text+= whatever
,你会使用 sb.append(whatever)
你最终会做 rezultat.setText(sb.toString( ));
关于java - 根据某些规则替换 EditText 中的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37334914/