首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

華為機試實戰復盤:字符串處理陷阱與心態管理經驗總結

     編輯:Java 綜合教學

題目回顧

輸入字符串,處理星號 *:中間的刪除,首尾的保留,無星號直接輸出。看似簡單,實則暗藏正則特殊字符與邊界條件陷阱。

失誤深度復盤

1. 粗心導致的三次機會耗盡

  • 未先瀏覽所有題目,錯失建立信心的簡單題
  • 調試輸出語句未註釋直接提交,浪費 1 次機會
  • 慌亂中未使用固定測試數據,導致錯誤定位混亂

2. 基礎不扎實:split() 正則陷阱

// 錯誤:* 是正則元字符,需轉義
String[] parts = line.split("*"); // PatternSyntaxException

// 正確:雙重轉義
String[] parts = line.split("\\*");

且 split() 返回數組,直接打印輸出的是地址值而非內容,需遍歷拼接。

3. 心態失衡:鑽牛角尖

堅持失敗方案超 40 分鐘,未嘗試替代算法(如 StringBuilder 遍歷刪除),錯失簡單高效解法。

優化解法對比

方案一:split + 拼接(修正版)

if (line.contains("*")) {
    boolean start = line.startsWith("*");
    boolean end = line.endsWith("*");
    String mid = line.substring(start ? 1 : 0, end ? line.length()-1 : line.length());
    String[] parts = mid.split("\\*");
    StringBuilder sb = new StringBuilder();
    for (String p : parts) sb.append(p);
    System.out.print((start?"*":"") + sb + (end?"*":""));
}

方案二:StringBuilder 遍歷刪除(更優雅)

StringBuffer sb = new StringBuffer(line);
for (int i = 1; i < sb.length()-1; i++) {
    if (sb.charAt(i) == '*') {
        sb.deleteCharAt(i);
        i--; // 關鍵:刪除後索引回退
    }
}
System.out.println(sb);

Java split() 避坑指南

分隔符正確寫法說明
.split("\\.")正則元字符需雙轉義
|split("\\|")管道符同理
*split("\\*")星號同理
+split("\\+")加號同理
\split("\\\\")四個斜桿:Java轉義+正則轉義
多字符split(" |-|#")用 | 連接多個分隔符

機試/面試心法總結

  1. 先易後難:掃題 3 分鐘,優先拿捏必得分
  2. 調試規範:固定測試數據,輸出日誌帶標識,提交前清理
  3. 多備方案:一條路走不通 10 分鐘立即切換思路
  4. 基礎過硬:API 細節(如正則轉義)必須肌肉記憶
  5. 心態穩定:遇阻深呼吸,重讀題目,分析輸出而非盲目改代碼

這次失利雖痛,卻是成長最寶貴的疫苗——君需更謹慎,此次失誤不可再;君當更努力,夯基迎難不可阻!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved