2014-02-21 58 views
0

我正在製作一個Android應用程序,通過藍牙從arduino到android接收不同級別的電壓並將其轉換爲字母。我的應用程序已經可以將它翻譯成字母,現在我的問題是我不知道如何刪除在for循環內的字符串構建器中的最後一個字母..我有這個按鈕稱爲退格鍵,我希望它可以使用相同的功能就像在計算機的退格鍵中按下它將刪除最後一封信一樣。我希望有人能幫助我,但我仍然對此很陌生。如何製作一個退格按鈕,刪除for循環內的一個stringbuilder的最後一個字符

注意:這些代碼來自主要活動; 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; 

      } 

     }); 
+0

使用「\ B」退格鍵 –

+0

只是把循環後刪除... – njzk2

+0

我試圖把循環之後的刪除,它仍然無法正常工作..我猜想其中一個問題是我使用deleteCharAt()的方式,因爲我從這裏讀到「http://stackoverflow.com/questions/5212928/how-to-trim-a-java-stringbuilder」那個deleteCharAt方法每次都複製數組,所以我認爲這就是爲什麼它不工作的原因..我希望有人可以提供另一種方法,如果這確實是 – user3242773

回答

0

onClick方法在退格的onClickListener是事件驅動的,即,當退格按鈕被點擊時,onClick方法將被稱爲一個StringBuffer。因此,將test設置爲true就不會有問題,因爲for循環自那時以來就已經停止執行。

您可以直接使用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. 
    } 
} 

注意的StringBuilder和StringBuffer的deleteCharAt方法返回的StringBuilder和StringBuffer分別與他們進行改變的值對象,這就是爲什麼我寫的:

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

並不僅僅是:

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

希望有所幫助。

+0

謝謝讓我理解,現在正在工作..謝謝你很多先生:D – user3242773

+0

你很受歡迎。 –

0

這工作肯定:

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()); 
    } 
}