国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

如何實(shí)現(xiàn)數(shù)值校驗(yàn)的算法

開(kāi)發(fā)
給定一個(gè)字符串如何判斷它是否為數(shù)值類(lèi)型?本文將帶著大家實(shí)現(xiàn)這個(gè)判斷算法。

給定一個(gè)字符串如何判斷它是否為數(shù)值類(lèi)型?例如:字符串+100、5e2、-123、3.1416以及-1E-16都表示數(shù)值,為數(shù)值類(lèi)型,但12e、1a3.14、1.2.3、+-5以及12e+5.4都不是。

本文將帶著大家實(shí)現(xiàn)這個(gè)判斷算法,歡迎各位感興趣的開(kāi)發(fā)者閱讀本文。

實(shí)現(xiàn)思路

我們先來(lái)看一下數(shù)值的定義規(guī)則:表示數(shù)值的字符串遵循模式A[.[B]][e|EC]或者.B[e|EC],其中:

  • A為數(shù)值的整數(shù)部分
  • B緊跟著小數(shù)點(diǎn)為數(shù)值的小數(shù)部分
  • C緊跟著e或者E為數(shù)值的指數(shù)部分

在小數(shù)里可能沒(méi)有數(shù)值的整數(shù)部分,例如:小數(shù).123等于0.123。因此A部分不是必須的,如果一個(gè)數(shù)沒(méi)有整數(shù)部分,那么它的小數(shù)部分不能為空。

上述A和C都是可能以+或者-開(kāi)頭的0~9的數(shù)位串;B也是0~9的數(shù)位串,但前面不能有正負(fù)號(hào)。我們以字符串123.45e+6為例,其中:

  • 123是它的整數(shù)部分A
  • 45是它的小數(shù)部分B
  • +6是它的指數(shù)部分C

判斷一個(gè)字符串是否符合上述模式時(shí),首先盡可能多地掃描0~9的數(shù)位(有可能起始處有+或者-),也就是前面模式中表示數(shù)值整數(shù)的A部分。如果遇到小數(shù)點(diǎn).,則開(kāi)始掃描表述數(shù)值小數(shù)部分的B部分。如果遇到e或者E,則開(kāi)始掃描表示數(shù)值指數(shù)的C部分。

我們將上面所述整理下,就能列出實(shí)現(xiàn)思路了,如下所示:

(1) 在字符串后添加結(jié)束標(biāo)志;

(2) 使用全局索引遍歷字符串;

(3) 設(shè)計(jì)一個(gè)函數(shù)用來(lái)掃描無(wú)符號(hào)整數(shù)(字符串中0~9的數(shù)位),用來(lái)判斷數(shù)值模式中的B部分;

(4) 設(shè)計(jì)一個(gè)函數(shù)用來(lái)掃描可以表示正負(fù)的+或者-為起始的0~9的數(shù)位(類(lèi)似于一個(gè)可能帶正負(fù)符號(hào)的整數(shù)),用來(lái)判斷數(shù)值模式中的A和C部分;

(5) 從頭開(kāi)始掃描字符串,跳過(guò)首部空格,掃一次全局索引自增一次:

  • 調(diào)用掃描有符號(hào)整數(shù)函數(shù)來(lái)掃描A部分
  • 如果字符串中包含小數(shù)點(diǎn).,則調(diào)用掃描無(wú)符號(hào)整數(shù)函數(shù)來(lái)掃描B部分
  • 如果字符串中包含E或者e,則調(diào)用掃描有符號(hào)整數(shù)函數(shù)來(lái)掃描C部分

(6) 跳過(guò)尾部空格;

(7) 判斷校驗(yàn)結(jié)果是否為true以及全局索引自增到了結(jié)束標(biāo)識(shí)處。

接下來(lái),我們以123.45e+6為例,畫(huà)一下上述流程的執(zhí)行過(guò)程,如下所示:


實(shí)現(xiàn)代碼

萬(wàn)事俱備,接下來(lái),我們來(lái)看下代碼實(shí)現(xiàn)。

掃描無(wú)符號(hào)整數(shù)函數(shù)的代碼如下所示:

export class NumericalCheck {
// 指針?biāo)饕?/span>
private index = 0;

// 掃描無(wú)符號(hào)整數(shù)
private scanUnsignedInteger(str: string): boolean {
const before = this.index;
while (str.charAt(this.index) >= "0" && str.charAt(this.index) <= "9") {
this.index++;
}
return this.index > before;
}
}

掃描有符號(hào)整數(shù)函數(shù)是在無(wú)符號(hào)的基礎(chǔ)上添加符號(hào)的判斷,其如下所示:

  // 掃描有符號(hào)整數(shù)
private scanInteger(str: string): boolean {
// 判斷其是否包含正負(fù)號(hào)
if (str.charAt(this.index) == "+" || str.charAt(this.index) == "-") {
this.index++;
}

// 掃描無(wú)符號(hào)整數(shù)
return this.scanUnsignedInteger(str);
}

最后,從頭到尾遍歷字符串,結(jié)合上述兩個(gè)函數(shù),判斷字符串是否為數(shù)值,其代碼如下所示:

  public isNumber(numStr: string): boolean {
if (numStr == null || numStr.length == 0) {
return false;
}
// 添加結(jié)束標(biāo)志
numStr = numStr + "|";
// 跳過(guò)首部的空格
while (numStr.charAt(this.index) == " ") {
this.index++;
}

// 掃描整數(shù)部分
let numeric = this.scanInteger(numStr);

// 有小數(shù)點(diǎn),處理小數(shù)部分
if (numStr.charAt(this.index) == ".") {
this.index++;
// 小數(shù)兩邊只要有一邊有數(shù)字即可,所以用||
numeric = this.scanUnsignedInteger(numStr) || numeric;
}

// 有e||E,處理指數(shù)部分
if (numStr.charAt(this.index) == "E" || numStr.charAt(this.index) == "e") {
this.index++;
// e || E兩邊都要有數(shù)字,所以用&&
numeric = numeric && this.scanInteger(numStr);
}

// 跳過(guò)尾部空格
while (numStr.charAt(this.index) == " ") {
this.index++;
}
const checkResult = numeric && numStr.charAt(this.index) == "|";
// 重置指針?biāo)饕?/span>
this.index = 0;
return checkResult;
}

完整代碼請(qǐng)移步:??NumericalCheck.ts??。

測(cè)試用例

接下來(lái),我們舉幾個(gè)例子,將其帶入上述代碼中,看下它能否正確執(zhí)行,如下所示:

let str = "123.45e+6";
const numericalCheck = new NumericalCheck();
let checkResult = numericalCheck.isNumber(str);
printCheckResult();

str = " .12e1 ";
checkResult = numericalCheck.isNumber(str);
printCheckResult();

str = "12e";
checkResult = numericalCheck.isNumber(str);
printCheckResult();

str = "1.2.3";
checkResult = numericalCheck.isNumber(str);
printCheckResult();

function printCheckResult() {
console.log(`字符串 ${str}是否為數(shù)值校驗(yàn)結(jié)果為:${checkResult}`);
}

執(zhí)行結(jié)果如下所示:

示例代碼文中所舉代碼的完整版請(qǐng)移步:

責(zé)任編輯:趙寧寧 來(lái)源: 神奇的程序員
相關(guān)推薦

2015-07-29 15:11:17

Playground數(shù)值算法

2020-12-08 08:08:51

Java接口數(shù)據(jù)

2022-06-17 07:49:14

緩存LRU

2009-12-01 14:00:37

PHP字符串轉(zhuǎn)換為數(shù)值

2020-11-04 10:20:56

嵌入式算法CRC

2017-11-16 15:25:54

Go語(yǔ)言算法代碼

2022-04-21 09:59:53

Nest參數(shù)校驗(yàn)

2021-07-05 06:39:59

經(jīng)典算法無(wú)序數(shù)組

2022-11-10 07:53:54

Spring參數(shù)校驗(yàn)

2015-04-16 10:35:08

微博微博如何實(shí)現(xiàn)

2021-02-01 10:17:14

編程C語(yǔ)言計(jì)算機(jī)

2009-06-26 16:12:14

propertiesSpring

2019-11-23 23:25:07

算法好壞數(shù)據(jù)

2009-09-25 15:15:17

算法

2022-02-18 08:26:12

TopK數(shù)組面試題

2022-05-17 12:23:25

排序算法面試

2020-08-10 15:24:05

Snowflake算法開(kāi)源

2025-05-27 07:07:29

2020-04-06 20:30:37

JavaScriptBoolean開(kāi)發(fā)

2009-07-21 15:46:48

獲得output參數(shù)值iBATIS教程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

水蜜桃久久夜色精品一区的特点| 最新国产精品| 亚洲午夜久久久久中文字幕久| 久久精品人成| 日日夜夜亚洲精品| 欧美三级韩国三级日本一级| 国产精品亚洲二区在线观看| 久久午夜精品| 国产精品国产三级国产aⅴ浪潮| 国产精品亚洲成在人线| 欧美高清视频一二三区 | 日韩免费av| 亚洲人成电影网站色xx| 亚洲成人av高清| 国产亚洲精品资源在线26u| 婷婷久久伊人| 亚洲精品社区| 国产精品一区二区三区成人| 在线中文字幕电影| 欧美日韩美女在线| 欧美xxxx18| 久久久99精品久久| 韩日视频在线观看| 强制捆绑调教一区二区| 粉嫩av一区二区三区免费观看| 精品三级在线观看视频| 最近2019好看的中文字幕免费| 国产一线二线在线观看| 欧美一区午夜精品| 91福利在线视频| 欧美视频一二三区| 黄色av网站在线| 午夜av电影一区| 情se视频网在线观看| 亚洲欧洲国产日韩| 日韩中文字幕a| 国产99久久久精品| 亚洲伊人婷婷| 肉色丝袜一区二区| 秋霞毛片久久久久久久久| 99亚洲精品| 蜜桃久久影院| 日本最新不卡在线| 日本黄色a视频| 久久99国产精品久久| 麻豆映画在线观看| 99在线精品视频| 成年人视频网站免费| 国产99久久久国产精品免费看 | 色爱综合网欧美| 国产97在线播放| 日韩精品水蜜桃| 91精品视频免费看| 中文字幕乱码亚洲无线精品一区| 91在线观看免费网站| 在线观看免费一区二区| 亚洲自拍偷拍视频| 亚洲天天综合| 老司机精品福利在线观看| 媚黑女一区二区| 日韩亚洲视频在线| 成人教育av在线| 理论视频在线观看| 欧美性猛片aaaaaaa做受| 久久久久久久| 国产精品偷伦一区二区| 美女精品一区二区| 99久久影视| 精精国产xxxx视频在线| 亚洲精品99久久久久| 亚洲免费资源| 日韩av观看网址| 噜噜噜久久亚洲精品国产品小说| 国产精品视频一区二区三区四区五区| 亚洲一区二区三区四区在线观看| 欧美亚洲天堂| 欧美资源在线观看| 美女视频网站黄色亚洲| 成视频年人免费看黄网站| 欧美乱熟臀69xxxxxx| 精品视频91| 精品麻豆av| 中文字幕视频一区二区三区久| 污污的网站在线看| 国产精品久久久久久久久久尿 | 婷婷丁香激情网| 日韩一区二区免费在线电影| 久久精品66| 9色视频在线观看| 色国产精品一区在线观看| 永久免费观看精品视频| 精品一区日韩成人| 亚洲女子a中天字幕| 精品欧美日韩精品| 裸模一区二区三区免费| 欧美激情在线一区二区| 黄色aa久久| 国产福利不卡| 亚洲视频一二区| а√天堂资源国产精品| 日本精品免费| 欧美又粗又大又爽| 亚洲人成精品久久久| 女人天堂av手机在线| 日韩欧美国产1| 欧美日本一区二区高清播放视频| 超污网站在线观看| 一区二区三区四区在线观看视频| 夜久久久久久| 日本中文字幕电影在线观看 | 日本一二三四高清不卡| 成人欧美一区二区三区的电影| 国产精品v欧美精品v日韩| 亚洲在线视频免费观看| 大陆精大陆国产国语精品| 亚洲精品久久久久久久蜜桃臀| 欧美一区二区三区在线| 中文在线播放一区二区| 久热久精久品这里在线观看| 久久久在线免费观看| 久久亚洲捆绑美女| 91久久综合| 精品999网站| 美女激情网站| 久久久久久久91| 久久久久亚洲蜜桃| 四虎影视4hu4虎成人| 在线免费观看成人网| 欧美日韩中字一区| 欧美日本一区| eeuss影院www在线观看| 成人动漫在线视频| 精品国产91久久久| 欧美日韩在线二区| 992tv在线观看免费进| 国产精品视频久久久久| 亚洲图片欧美色图| 99成人超碰| 国产在线中文字幕| 久久av一区二区三区漫画| 欧美一区二区在线播放| 国产美女一区| av人人综合网| www.成年人视频| 日韩在线观看视频免费| 99re在线视频这里只有精品| 亚洲天堂av资源在线观看| 成人免费看黄网址| 国产欧美日韩高清| 欧美亚洲高清一区| 日韩高清不卡一区二区| 久久人体大尺度| 日本www在线视频| 性色av一区二区三区红粉影视| 亚洲蜜桃精久久久久久久| 日本精品黄色| 日本在线观看免费| 日韩啊v在线| 中文字幕无线精品亚洲乱码一区 | 超碰porn在线| 伊人久久99| 久久视频免费在线播放| 亚洲色图视频网站| 国产精品99免费看| av在线视屏| 亚洲一级免费在线观看| www国产亚洲精品| 国产午夜精品久久久| 国产精品久久夜| 牛牛国产精品| 岛国av免费在线观看| 国产激情在线观看视频| 国产精品久久久久久久av大片| 欧美剧情片在线观看| 国产suv精品一区二区883| 国产剧情一区二区在线观看| 在线一区二区三区精品| 亚洲成人蜜桃| 欧美性受xxxx白人性爽| 日本丶国产丶欧美色综合| 国产精品一区2区| 亚洲免费成人av在线| 韩国av网站在线| 免费在线观看的av网站| 97欧洲一区二区精品免费| 亚洲图片在区色| 精品久久久久久久久国产字幕| 国产一区二区福利视频| 99精品美女| 亚洲影视资源| 免费观看在线午夜影视| 久久久久久久片| 欧美精品一区在线发布| 97碰碰碰免费色视频| 亚洲国产精品高清久久久| 亚洲一区二区三区小说| 成人免费黄色在线| 亚洲在线视频| 第一社区sis001原创亚洲| 黄色成人在线观看网站|