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

标签 java android string android-layout

我正在创建一个应用程序,这样当用户输入一个词并按下按钮时,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,因为 Stringsimmutable 并且每次连接实际上都会生成一个新的 String。 使用 StringBuilder 它看起来像这样:

StringBuilder sb = new StringBuilder();

而不是 text+= whatever,你会使用 sb.append(whatever) 你最终会做 rezultat.setText(sb.toString( ));

关于java - 根据某些规则替换 EditText 中的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37334914/

相关文章:

java - Spring 构造参数?

java - 检查java中的多个 boolean 条件

java - 如何在 Java 软件架构中实现可插入功能和模块?

android - Intent 使用 Google 导航获取具有多个航路点的行程

android - 如何从我的 Android 应用程序发送电子邮件?

java - 如何刷新字符串中的某些参数?

Java 8 字符串垃圾收集

java - 导出至excel并显示图表

android - 适合 2 个 TextView

string - 转换输入文件中的字符串