根据某些规则替换EditText中的字母

时间:2016-05-19 22:14:03

标签: java android string android-layout

我正在创建一个应用程序,以便当用户输入单词并按下按钮时,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("-...");
                }
            }
        }
    });
}
}

提前致谢。

2 个答案:

答案 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”应该像这样返回“。 - ...-....-”。