- Scala編程實(shí)戰(zhàn)(原書第2版)
- (美)阿爾文·亞歷山大
- 784字
- 2024-04-15 12:05:19
2.12 創(chuàng)建隨機(jī)字符串
問題
當(dāng)你使用Random類的nextString方法生成一個(gè)隨機(jī)字符串時(shí),會(huì)看到很多不尋常的輸出或?字符。一個(gè)典型的例子是這樣的:

解決方案
nextString返回Unicode字符,而這些字符在你的系統(tǒng)上可能顯示得很好,也可能不顯示。要想只生成字母數(shù)字字符,即字母[A-Za-z]和數(shù)字[0-9],請(qǐng)使用下面的方式:

Random.alphanumeric返回一個(gè)LazyList,所以這里使用take(10).mkString來獲取流中的前10個(gè)字符。如果只調(diào)用Random.alphanumeric.take(10),會(huì)得到這個(gè)結(jié)果:

因?yàn)長azyList是惰性的——它只在需要的時(shí)候才會(huì)被計(jì)算——所以必須調(diào)用像mkString這樣的方法來對(duì)其求值。
討論
根據(jù)Random類文檔(https://oreil.ly/syhlb),alphanumeric“返回一個(gè)從A~Z、a~z和0~9中平均選擇的偽隨機(jī)的LazyList”。
如果想要一個(gè)更廣范圍的字符,nextPrintableChar方法會(huì)返回ASCII字符,其ASCII碼的范圍是33~126。這包括鍵盤上幾乎所有的簡單字符,包括字母、數(shù)字和像!、-、+、]和>這樣的字符。例如,這里有一個(gè)小算法,可以生成一個(gè)隨機(jī)長度的可輸出字符序列:

下面是該算法所產(chǎn)生的隨機(jī)序列的幾個(gè)例子:

這些可以用mkString轉(zhuǎn)換為一個(gè)字符串,如下所示:

請(qǐng)參閱https://www.asciitable.com/或類似網(wǎng)站,了解ASCII碼范圍為33~126的完整字符列表。
惰性方法
正如20.1節(jié)中所描述的,在Apache Spark中,可以把集合方法看成是轉(zhuǎn)換(transformation)方法或動(dòng)作(action)方法:
·轉(zhuǎn)換方法可以轉(zhuǎn)換一個(gè)集合中的元素。對(duì)于像List、Vector和LazyList這樣的不可變的類,這些方法會(huì)對(duì)現(xiàn)有的元素進(jìn)行轉(zhuǎn)換,從而創(chuàng)建一個(gè)新的集合。就像Spark一樣,當(dāng)你使用Scala的LazyList時(shí),這些方法被惰性求值(也稱為惰性或非嚴(yán)格求值)。像map、filter、take等方法都被認(rèn)為是轉(zhuǎn)換方法。
·動(dòng)作方法是本質(zhì)上是強(qiáng)制求值的方法。它們是一種聲明“我現(xiàn)在就要這個(gè)結(jié)果”的方式。像foreach和mkString這樣的方法可以被認(rèn)為是動(dòng)作方法。
請(qǐng)參閱11.1節(jié)以了解更多關(guān)于轉(zhuǎn)換方法的討論和例子。
另見
·在我的博客“How to Create Random Strings in Scala(A Few Different Examples)”(https://oreil.ly/PEijH)中,展示了7種不同生成隨機(jī)字符串的方法,包括純字母和字母數(shù)字字符串。
·在“Scala:A Function to Generate a Random-Length String with Blank Spaces”(https://oreil.ly/LtUy4)中,展示了如何生成一個(gè)包含空格的隨機(jī)長度的隨機(jī)字符串。
- Web前端開發(fā)技術(shù):HTML、CSS、JavaScript(第3版)
- TypeScript入門與實(shí)戰(zhàn)
- Mastering JavaScript Object-Oriented Programming
- 無代碼編程:用云表搭建企業(yè)數(shù)字化管理平臺(tái)
- Clojure for Domain:specific Languages
- 網(wǎng)絡(luò)爬蟲原理與實(shí)踐:基于C#語言
- INSTANT Django 1.5 Application Development Starter
- Linux命令行與shell腳本編程大全(第4版)
- Modular Programming in Java 9
- Building Serverless Applications with Python
- C和C++游戲趣味編程
- Lighttpd源碼分析
- Scratch3.0趣味編程動(dòng)手玩:比賽訓(xùn)練營
- Apache Solr PHP Integration
- Modular Programming with JavaScript