第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

正則表達(dá)式從文件中檢索雙數(shù)字,但忽略具有多個(gè)點(diǎn)的數(shù)字

正則表達(dá)式從文件中檢索雙數(shù)字,但忽略具有多個(gè)點(diǎn)的數(shù)字

小怪獸愛(ài)吃肉 2023-09-13 18:05:58
檢索文件中的所有雙精度數(shù)字并返回總和,但避免使用多個(gè)點(diǎn)的值。測(cè)試用例 :在文件中12.3,123.45,19,2.16.8.1.1輸出預(yù)期輸出 -> 154.75 我的輸出 -> 166.01-?\\d+\\.?\\d* 這將檢索所有雙數(shù)字,但無(wú)法忽略帶有多個(gè)點(diǎn)的數(shù)字。FileReader reader = new FileReader(filename);BufferedReader in = new BufferedReader(reader);String line;while ((line = in.readLine()) != null) {    Pattern pattern = Pattern.compile("-?\\d+\\.?\\d*");    Matcher matcher = pattern.matcher(line);    while (matcher.find()) {        String x = matcher.group(0);        y = Double.parseDouble(x);        sum = sum + y;    }}預(yù)期輸出 -> 154.75 我的輸出 -> 166.01
查看完整描述

3 回答

?
海綿寶寶撒

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊

您可以使用

-?(?<!\d)(?<!\d\.)\d*\.?\d+(?!\.?\d)

如果不需要匹配-前面的可選項(xiàng),則將其刪除即可。

請(qǐng)參閱正則表達(dá)式演示

細(xì)節(jié)

  • -?- 可選的連字符

  • (?<!\d)(?<!\d\.)- 緊靠左邊,不應(yīng)有數(shù)字或數(shù)字 +.

  • \d*- 0+ 位數(shù)字

  • \.?- 一個(gè)可選的點(diǎn)

  • \d+- 1+ 位數(shù)字

  • (?!\.?\d)- 緊靠右邊,不能有數(shù)字或.+數(shù)字。

在 Java 中,使用:

Pattern pattern = Pattern.compile("-?(?<!\\d)(?<!\\d\\.)\\d*\\.?\\d+(?!\\.?\\d)");


查看完整回答
反對(duì) 回復(fù) 2023-09-13
?
一只萌萌小番薯

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個(gè)贊

我無(wú)法閱讀這些正則表達(dá)式,它們對(duì)于普通人來(lái)說(shuō)太復(fù)雜了。


為什么要使用復(fù)雜的正則表達(dá)式,其他開(kāi)發(fā)人員很難閱讀。如果我必須調(diào)試該代碼,我會(huì)討厭它。


我覺(jué)得像下面這樣的東西會(huì)更具可讀性,并且也會(huì)減少錯(cuò)誤的機(jī)會(huì),并且易于調(diào)試:


public double sumFile(String filename) {

    try (Stream<String> linesStream = Files.lines(Paths.get(filename))) {

        return linesStream.mapToDouble(this::sumLine).sum();

    } catch (IOException e) {

        e.printStackTrace();

    }

    return 0;

}


private double sumLine(String line) {

    return Arrays.stream(line.split(","))

            .filter(e -> e.split("\\.").length <= 2)

            .mapToDouble(Double::parseDouble)

            .sum();

}


查看完整回答
反對(duì) 回復(fù) 2023-09-13
?
白衣非少年

TA貢獻(xiàn)1155條經(jīng)驗(yàn) 獲得超0個(gè)贊

錯(cuò)誤數(shù)字的子串實(shí)際上有效的問(wèn)題。“1.2.3”應(yīng)該被忽略,但如果您只是盲目地尋找有效數(shù)字,那么這個(gè)數(shù)字可能包含“1.2”或“2.3”作為有效數(shù)字。

有兩種方法可以避免這種情況:

  1. 用已知的分隔符“,”分割該行,并驗(yàn)證每個(gè)部分是否有效

  2. 搜索有效和無(wú)效的號(hào)碼并丟棄無(wú)效的號(hào)碼。

    為此,您可以使用正則表達(dá)式-?\d+\.?\d*(\.d*)?,并在匹配組非空時(shí)丟棄結(jié)果。


查看完整回答
反對(duì) 回復(fù) 2023-09-13
  • 3 回答
  • 0 關(guān)注
  • 144 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)