亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式從文件中檢索雙數字,但忽略具有多個點的數字

正則表達式從文件中檢索雙數字,但忽略具有多個點的數字

小怪獸愛吃肉 2023-09-13 18:05:58
檢索文件中的所有雙精度數字并返回總和,但避免使用多個點的值。測試用例 :在文件中12.3,123.45,19,2.16.8.1.1輸出預期輸出 -> 154.75 我的輸出 -> 166.01-?\\d+\\.?\\d* 這將檢索所有雙數字,但無法忽略帶有多個點的數字。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;    }}預期輸出 -> 154.75 我的輸出 -> 166.01
查看完整描述

3 回答

?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

您可以使用

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

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

請參閱正則表達式演示

細節

  • -?- 可選的連字符

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

  • \d*- 0+ 位數字

  • \.?- 一個可選的點

  • \d+- 1+ 位數字

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

在 Java 中,使用:

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


查看完整回答
反對 回復 2023-09-13
?
一只萌萌小番薯

TA貢獻1795條經驗 獲得超7個贊

我無法閱讀這些正則表達式,它們對于普通人來說太復雜了。


為什么要使用復雜的正則表達式,其他開發人員很難閱讀。如果我必須調試該代碼,我會討厭它。


我覺得像下面這樣的東西會更具可讀性,并且也會減少錯誤的機會,并且易于調試:


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();

}


查看完整回答
反對 回復 2023-09-13
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

錯誤數字的子串實際上有效的問題?!?.2.3”應該被忽略,但如果您只是盲目地尋找有效數字,那么這個數字可能包含“1.2”或“2.3”作為有效數字。

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

  1. 用已知的分隔符“,”分割該行,并驗證每個部分是否有效

  2. 搜索有效和無效的號碼并丟棄無效的號碼。

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


查看完整回答
反對 回復 2023-09-13
  • 3 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號