我正在创建一个应用程序,以便当用户输入单词并按下按钮时,TextView
会根据某些规则显示一个新单词。就好像这个词有字母" a"在其中,然后用" .-"(摩尔斯电码)改变它。
示例:输入字:" abba"输出:"。 - .... - ......" (a =" .-" b =" -...")
我创建了一个只有2条规则的演示应用程序,用于" 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("-...");
}
}
}
});
}
}
提前致谢。
答案 0 :(得分:1)
你有一个错误的逻辑 - 你总是每次都使用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而不是字符串,因为Strings
不可变,并且连接实际上是新的{{ 1}}每一次。
使用StringBuilder,它看起来像这样:
String
而不是StringBuilder sb = new StringBuilder();
,您使用的是text+= whatever
,而您最终会sb.append(whatever)
答案 1 :(得分:0)
这可以通过字符串替换方法来完成,因为我评论它是最简单的方法,并且不需要更多的ram使用。以下是您拥有的修改后的代码
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();
String newString = morse.replace("a",".-");
newString = newString.replace("b","-...");
rezultat.setText(newString);
}
});
}
}
如果你有很多模式,那么你可以使模式成为一个常量数组,然后用字符串替换方法循环模式。
<强>校正:强>
在你的例子中,“abba”应该像这样返回“。 - ...-....-”。