學習軌道
/
Scala
Scala
/
練習
/
電話號碼
電話號碼

電話號碼

簡單

簡介

你加入了 LinkLine,這是一家頂尖的通訊公司,致力於讓每個人都能擁有可靠的連線。 團隊面臨一個巨大的挑戰:使用者提交的電話號碼格式五花八門,有破折號、空格、點、括號,甚至還有前綴。 有些號碼是有效的,有些則根本無法使用。

你的任務就是把這團混亂變成井然有序。 你要清理有效的號碼,把它們整理成適合系統使用的格式。 同時,你還要找出並過濾掉所有無效的項目。

LinkLine 的營運能否順利,取決於你能否區分哪些可用、哪些不能用。 你準備好迎接挑戰,讓連線順暢運作了嗎?

說明

清理使用者輸入的電話號碼,以便傳送簡訊。

**北美號碼編排計畫(NANP)**是北美許多國家使用的電話號碼系統,例如美國、加拿大和百慕達。 所有 NANP 國家共用同一個國際國碼:1。

NANP 號碼是十位數的號碼,由三位數的號碼編排區碼(一般稱為_區域碼_)加上七位數的本地號碼組成。 本地號碼的前三位數字代表_交換碼_,後面接著獨一無二的四位數字,也就是_用戶號碼_。

格式通常表示為

NXX NXX-XXXX

其中N是 2 到 9 的任一位數字,而X是 0 到 9 的任一位數字。

有時這些號碼前面也會加上國碼(以1或+1表示)。

你的任務是清理各種不同格式的電話號碼,移除其中的標點符號,如果有的話也一併移除國碼。

例如以下輸入

  • +1 (613)-995-0253
  • 613-995-0253
  • 1 613 995 0253
  • 613.995.0253

都應該產生以下輸出

6139950253

注意: 由於這個練習只處理 NANP 國家使用的電話號碼,因此只有 1 是有效的國碼。

軌道專屬說明

為了簡單易讀,可以考慮使用 Scala 的集合函式來取代 Java 的String方法。 請記住,在 Scala 中,String隱式地也是Seq[Char],所以你可以像呼叫String方法一樣輕鬆地呼叫它們。

例如:

  • 用filter取代replaceAll
  • 用take、takeRight、drop、head、tail取代substring

另一個值得探索的想法,可能是把String改成List[Char],然後使用::運算子來進行模式匹配。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Scala Exercism

準備好開始 電話號碼 了嗎?

註冊 Exercism,透過 95 個練習 和真人引導來學習並精通 Scala,全部免費。