2016-05-19 36 views
1

我正在創建一個應用程序,以便當用戶輸入一個單詞並按下按鈕時,TextView會根據一些規則顯示一個新單詞。就好像該單詞中有字母「a」,然後用「.-」(莫爾斯電碼)更改。根據一些規則替換EditText中的字母

實施例:輸入詞: 「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("-..."); 
       } 
      } 
     } 
    }); 
} 
} 

在此先感謝。

+0

你可以使用正則表達式或字符串替換方法更容易,你可以做到沒有for循環 –

回答

1

您的邏輯錯誤 - 您每次都使用setText()覆蓋文本,這就是爲什麼只有最後一個值在TextView中可見。您需要附加結果並在循環結束時將文本設置爲TextView。如果你想有稍好的性能,可以考慮使用StringBuilderStringBuffer而不是字符串,因爲Strings不變和串聯實際上使每一次新的String

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它會是這樣的:

StringBuilder sb = new StringBuilder(); 

相反的text+= whatever,你會使用sb.append(whatever)和你最終會做rezultat.setText(sb.toString());

0

這可以通過字符串進行替換的方法是什麼我評論這是最簡單的方法,不需要更多的內存使用。這裏是你有什麼

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

如果您有很多模式,那麼你可以讓模式的常量數組,只是循環用繩子模式替代方法修改後的代碼。

更正:

在您的例子中, 「利羣」 應該返回 「 - ...-....-」 像這樣。