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

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

在雙引號(hào)外的逗號(hào)上拆分。如果是單引號(hào),則忽略雙引號(hào)

在雙引號(hào)外的逗號(hào)上拆分。如果是單引號(hào),則忽略雙引號(hào)

阿波羅的戰(zhàn)車 2022-06-15 10:55:40
我有兩種類型的字符串,我需要使用逗號(hào)分隔第一種(1" 表示 1 英寸)130,TEXT 1" 67 SERIES ,400,4,1,998,.010,9,-,7,130第二種130,"TEXT, SAMPLE TEXT",400,4,1,998,.010,9,-,7,130在第一種類型中,我需要按原樣獲取字符串并使用拆分,因此我的拆分值將是 130 和 TEXT 1" 67 SERIES 等等。但是在第二種類型中,我需要忽略雙引號(hào)之間的逗號(hào)并將字符串作為一個(gè)整體。我用這個(gè)分開a.split(",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)")它通過了第二個(gè)案例,但在第一個(gè)案例中失敗了。請(qǐng)幫忙
查看完整描述

2 回答

?
繁星coding

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

您的輸入格式不是有效的 CSV 格式。根據(jù) Wikipedia Comma-separated values page,如果完全使用引號(hào),則必須引用字段中的文字引號(hào)字符。

這意味著任何現(xiàn)有的通用 CSV 解析器庫都不太可能處理同一文件中的兩種類型的行。

為了說明這個(gè)問題有多深,請(qǐng)考慮:

   130,TEXT 1" 67 SERIES, TEXT 2",4,1,998,.010,9,-,7,130

這可能意味著:

  • 一個(gè)字段包含TEXT 1" 67 SERIES, TEXT 2"

  • 一個(gè)包含TEXT 1 67 SERIES, TEXT 2, 或

  • 兩個(gè)字段TEXT 1" 67 SERIESTEXT 2"

消除歧義的唯一方法是編寫一些自定義邏輯以對(duì)其進(jìn)行分類......基于您自己的業(yè)務(wù)規(guī)則。

我不認(rèn)為你可以用split和正則表達(dá)式來做到這一點(diǎn)。您需要編寫一個(gè)適當(dāng)?shù)淖远x解析器。

但在這種情況下,我認(rèn)為您有權(quán)反對(duì)創(chuàng)建此 CSV 數(shù)據(jù)的任何人/任何人。他們應(yīng)該遵守規(guī)則。我很想實(shí)現(xiàn)我的系統(tǒng),通過現(xiàn)成的語法檢查器提供 CSV 文件,并自動(dòng)拒絕任何未通過驗(yàn)證的文件。

您可以自動(dòng)修復(fù)報(bào)價(jià)中的錯(cuò)誤嗎?我認(rèn)為不是……在一般情況下。如前所述,無法判斷格式錯(cuò)誤的 CSV 中的雙引號(hào)是否應(yīng)該是文字。它需要人類智能和領(lǐng)域知識(shí)來理解數(shù)據(jù)的含義。


查看完整回答
反對(duì) 回復(fù) 2022-06-15
?
米琪卡哇伊

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

不知道如何(如果有的話)使用單個(gè)正則表達(dá)式來完成。但這是一種蠻力方法,它計(jì)算字符串中引號(hào)的數(shù)量并從那里開始。


public static void main(String[] args) {

    System.out.println("---Type 1---");

    for (String s : split("130,TEXT 1\" 67 SERIES ,400,4,1,998,.010,9,-,7,130")) {

        System.out.println(s);

    }

    System.out.println("\n---Type 2---");

    for (String s : split("130,\"TEXT, SAMPLE TEXT\",400,4,1,998,.010,9,-,7,130")) {

        System.out.println(s);

    }

}


private static List<String> split(String str) {

    List<String> tokens = new ArrayList<>();

    if (str.split("\"").length > 2) {

        int firstQuoteIndex = str.indexOf("\"");

        int secondQuoteIndex = str.indexOf("\"", firstQuoteIndex + 1);

        tokens.add(str.substring(0, firstQuoteIndex - 1));

        tokens.add(str.substring(firstQuoteIndex + 1, secondQuoteIndex));

        tokens.addAll(Arrays.asList(str.substring(secondQuoteIndex + 2).split(",")));

    } else {

        tokens.addAll(Arrays.asList(str.split(",")));

    }

    return tokens;

}

輸出


---Type 1---

130

TEXT 1" 67 SERIES 

400

4

1

998

.010

9

-

7

130


---Type 2---

130

TEXT, SAMPLE TEXT

400

4

1

998

.010

9

-

7

130


查看完整回答
反對(duì) 回復(fù) 2022-06-15
  • 2 回答
  • 0 關(guān)注
  • 119 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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