java根据一些规则替换EditText中的字母
我正在创建一个应用程序,这样当用户输入一个单词并按下按钮时,TextView
会根据一些规则显示一个新单词。比如,如果单词中有字母“a”,那么就用“.-”(摩尔斯电码)来更改它
示例:输入字:“abba”输出:“.--…”(a=“.-”b=“-…”)
我已经创建了一个演示应用程序,其中只有两条“a”和“b”规则。如果我只输入一个字母,它就可以工作,但如果我输入更像“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("-...");
}
}
}
});
}
}
提前谢谢
# 1 楼答案
这可以通过字符串替换方法来实现,因为我认为这是最简单的方法,并且不会占用更多的内存。下面是您所拥有的修改后的代码
如果有很多模式,那么可以将该模式设置为常量数组,并使用字符串替换方法循环该模式
更正:
在你的例子中,“abba”应该像这样返回“…-…-…-”
# 2 楼答案
你有一个错误的逻辑-你总是通过每次使用
setText()
来覆盖文本,这就是为什么在TextView
中只有最后一个值是可见的。您需要附加结果,并在循环结束时,将文本设置为TextView
。这样做:如果您想要稍微好一些的性能,考虑使用StringBuilderStringBuffer而不是字符串,因为^ {CD4>}是<强>不可变,并且连接实际上每次都会生成一个新的^ {< CD5>}。 如果使用StringBuilder,它将如下所示:
您将使用
sb.append(whatever)
而不是text+= whatever
,最后您将使用rezultat.setText(sb.toString());