在前幾天的挑戰中,我們開始介紹了一個有趣而實用的功能:摩斯密碼轉換。這個功能允許使用者將文字訊息轉換成摩斯密碼,並將摩斯密碼解碼回原始文字。而今天要接續昨天的功能繼續介紹轉換的寫法,那就直接進入介紹吧!!!!
還記得昨天的 APP 畫面吧,因為有著兩種的轉換方式。
/**enter點擊*/
private void enterIconClicked(View view) {
if(isChange) {
morseTransformPresenter.morseCodeTransformEnglish(String.valueOf(input_editText.getText()));
} else {
if(!String.valueOf(input_editText.getText()).equals("")) {
morseTransformPresenter.englishTransformMorseCode(String.valueOf(input_editText.getText()));
//用來隱藏鍵盤
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(input_editText.getWindowToken(), 0);
input_editText.clearFocus();
}
}
}
/**點擊螢幕,關閉鍵盤*/
@Override
public boolean onTouchEvent(MotionEvent event) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
View focusedView = getCurrentFocus();
if (focusedView != null) {
imm.hideSoftInputFromWindow(focusedView.getWindowToken(), 0);
}
return super.onTouchEvent(event);
}
@Override
public void morseCodeTransformEnglish(String inputText) {
StringBuilder morseCodeStringBuilder = new StringBuilder(); // 用於構建摩斯密碼的 StringBuilder
StringBuilder outputMorseCodeStringBuilder = new StringBuilder(); // 用於構建最終轉換結果的 StringBuilder
for (String text : inputText.split("")) { // 遍歷 inputText 中的每個字符
if (!text.equals("/") && !text.equals(" ")) { // 如果字符不是斜杠和空格
morseCodeStringBuilder.append(text); // 將字符附加到 morseCodeStringBuilder 中
} else if (text.equals(" ")) { // 如果字符是空格,表示單詞之間的間隔
if (morseCodeStringBuilder.length() > 0 && !morseCodeStringBuilder.substring(0, 1).equals(" ")) { // 如果 morseCodeStringBuilder 不為空且不以空格開頭
if (morseCodeTool.getEnglishToMorseCode().get(morseCodeStringBuilder.toString()) == null) {
outputMorseCodeStringBuilder.append("§").append(" "); // 無效摩斯密碼,附加特殊符號 §
morseCodeStringBuilder.setLength(0); // 清空 morseCodeStringBuilder
} else {
outputMorseCodeStringBuilder.append(morseCodeTool.getEnglishToMorseCode().get(morseCodeStringBuilder.toString())); // 將摩斯密碼轉換為英文並附加到 outputMorseCodeStringBuilder 中
morseCodeStringBuilder.setLength(0); // 清空 morseCodeStringBuilder
}
}
} else { // 如果字符是斜杠
if (morseCodeStringBuilder.length() > 0) {
String firstText = Character.toString(morseCodeStringBuilder.charAt(0)); // 取得 morseCodeStringBuilder 的第一個字符
if (firstText.equals("/")) { // 如果第一個字符是斜杠,表示無效字符
morseCodeStringBuilder.setLength(0); // 清空 morseCodeStringBuilder
} else {
if (morseCodeTool.getEnglishToMorseCode().get(morseCodeStringBuilder.toString()) == null) {
outputMorseCodeStringBuilder.append("§").append(" "); // 無效摩斯密碼,附加特殊符號 §
morseCodeStringBuilder.setLength(0); // 清空 morseCodeStringBuilder
} else {
outputMorseCodeStringBuilder.append(morseCodeTool.getEnglishToMorseCode().get(morseCodeStringBuilder.toString())).append(" "); // 將摩斯密碼轉換為英文並附加到 outputMorseCodeStringBuilder 中
morseCodeStringBuilder.setLength(0); // 清空 morseCodeStringBuilder
}
}
}
}
}
if (morseCodeStringBuilder.length() > 0) {
String firstText = Character.toString(morseCodeStringBuilder.charAt(0)); // 取得 morseCodeStringBuilder 的第一個字符
if (!firstText.equals(" ") && !firstText.equals("/")) { // 如果第一個字符不是空格和斜杠
if (morseCodeTool.getEnglishToMorseCode().get(morseCodeStringBuilder.toString()) == null) {
outputMorseCodeStringBuilder.append("§"); // 無效摩斯密碼,附加特殊符號 §
} else {
outputMorseCodeStringBuilder.append(morseCodeTool.getEnglishToMorseCode().get(morseCodeStringBuilder.toString())); // 將摩斯密碼轉換為英文並附加到 outputMorseCodeStringBuilder 中
}
}
}
view.getTranslationCompleted(outputMorseCodeStringBuilder.toString()); // 調用回調方法,將最終轉換結果傳遞給 view
}
@Override
public void englishTransformMorseCode(String inputText) {
StringBuilder outputMorseCodeStringBuilder = new StringBuilder(); // 用於構建摩斯密碼的 StringBuilder
StringBuilder checkBlankStringBuilder = new StringBuilder(); // 用於檢查空格的 StringBuilder
String firstText = ""; // 用於存儲第一個字符
for (String text : inputText.split("")) { // 遍歷 inputText 中的每個字符
if (!text.equals("\n")) { // 如果字符不是換行符
if (checkBlankStringBuilder.length() != 0) { // 如果 checkBlankStringBuilder 不為空
firstText = Character.toString(checkBlankStringBuilder.charAt(0)); // 取得 checkBlankStringBuilder 的第一個字符
}
if (text.equals(" ")) { // 如果字符是空格
if (!firstText.equals(" ")) { // 如果第一個字符不是空格
outputMorseCodeStringBuilder.append("/"); // 添加斜杠表示單詞之間的間隔
checkBlankStringBuilder.append(" "); // 添加空格到 checkBlankStringBuilder 中
}
} else { // 如果字符不是空格
if (morseCodeTool.getMorseCodeList().get(text) == null) { // 檢查字符是否為有效的摩斯密碼
outputMorseCodeStringBuilder.append("§"); // 無效摩斯密碼,附加特殊符號 §
outputMorseCodeStringBuilder.append(" "); // 添加空格
} else {
outputMorseCodeStringBuilder.append(morseCodeTool.getMorseCodeList().get(text)); // 將字符轉換為摩斯密碼並附加到 outputMorseCodeStringBuilder 中
outputMorseCodeStringBuilder.append(" "); // 添加空格
checkBlankStringBuilder.setLength(0); // 清空 checkBlankStringBuilder
}
firstText = ""; // 清空 firstText
}
}
}
if (outputMorseCodeStringBuilder.length() != 0) { // 如果有轉換結果
outputMorseCodeStringBuilder.deleteCharAt(outputMorseCodeStringBuilder.length() - 1); // 刪除最後一個多餘的空格
view.getTranslationCompleted(outputMorseCodeStringBuilder.toString()); // 調用回調方法,將最終轉換結果傳遞給 view
}
}
這就是摩斯密碼轉換的部分拉,明天會繼續介紹下一個功能~!!!!!!