简体   繁体   English

如何制作一个退格按钮来删除一个for循环中stringbuilder的最后一个字符

[英]how to make a backspace button that removes the last character of a stringbuilder inside a for loop

I am making an Android app that receives different level of voltages from arduino to the android via bluetooth and translate it into letters. 我正在制作一个Android应用程序,它通过蓝牙接收从arduino到android的不同电压电平,并将其转换为字母。 My app can already translate it into letters, and my problem now is I dont know how to delete the last letter in the stringbuilder which is inside a for loop.. I have this button called backspace and i want it to work with the same function like in a computers's backspace wherein pressing it will delete the last letter.. I hope someone can help me, im still new to this. 我的应用程序已经可以将其转换为字母,现在的问题是我不知道如何删除字符串构建器中位于for循环内的最后一个字母。.我有一个名为Backspace的按钮,并且希望它与相同的功能一起使用就像在计算机的退格键中一样,按此键将删除最后一个字母。.我希望有人可以帮助我,对此仍然很新。

note: these codes are from the Main Activity; 注意:这些代码来自主要活动; sbletter is a stringbuffer that appends letters sbletter是一个附加字母的字符串缓冲区

boolean test = false;
char[] charArray = sbletter.toString().toCharArray();
char currentletter =' ';
char prevletter =' '; 

StringBuilder strBuild1 = new StringBuilder();

    for(int i = 0; i < charArray.length; i++) {
        currentletter = charArray[i];
            if(curletter != prevletter) {
                strBuild1.append(charArray[i]);
                    if(test){
                       strBuild1.deleteCharAt(strBuild1.length()-1); 
                    }
                test = false;
            }
                prevletter = currentletter;
        }

SecondActivity.textView1.setText(strBuild1.toString());

SecondActivity.backspace.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {

                test = true;

            }

        });

This works for sure: 这可以肯定地工作:

private void Zero1ActionPerformed(java.awt.event.ActionEvent evt) {                                      

    if (OutputTextField.getText().length()>0){
        StringBuffer sb = new StringBuffer(OutputTextField.getText());
        sb = sb.deleteCharAt(OutputTextField.getText().length()-1);
        OutputTextField.setText(sb.toString());
    }
}     

The onClick method in the onClickListener of the backspace is event driven, ie, when the backspace button will be clicked, the onClick method will be called. 退格键的onClickListener中的onClick方法是事件驱动的,即,当单击退格键时,将调用onClick方法。 So setting test to true there won't matter as the for loop would have already stopped executing by that time, since its outside somewhere. 因此,将test设置为true并不重要,因为那时候for循环已经停止执行了,因为它位于外部。

You can directly use sbletter to delete its last character like following: 您可以直接使用sbletter删除其最后一个字符,如下所示:

backspace.setOnClickListener(new View.OnClickListener() {

  public void onClick(View view) {

    sbletter = sbletter.deleteCharAt(sbletter.length - 1);

    // Now the last character from sbletter is deleted.
    // Use sbletter for whatever purpose you like now.
  }
}

Note that deleteCharAt method of StringBuilder and StringBuffer return StringBuilder and StringBuffer objects respectively which carry with them the changed value, that's why I wrote: 请注意,StringBuilder和StringBuffer的deleteCharAt方法分别返回StringBuilder和StringBuffer对象,它们带有更改后的值,这就是我这样写的原因:

sbletter = sbletter.deleteCharAt(sbletter.length - 1); // Will work as expected.

and not just: 而不仅仅是:

sbletter.deleteCharAt(sbletter.length - 1); // Won't work as expected.

Hope that helps. 希望能有所帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM