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

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

當(dāng)不同行在不同位置有空格時(shí)如何根據(jù)空格分割記錄

當(dāng)不同行在不同位置有空格時(shí)如何根據(jù)空格分割記錄

炎炎設(shè)計(jì) 2023-07-28 09:48:09
我有一個(gè)包含如下記錄的文件,我試圖根據(jù)空格分割其中的記錄并將它們轉(zhuǎn)換為逗號(hào)。文件:a 3w 12 98 header P6124e 4t 2  100 header I803c 12L 11 437       M12BufferedReader reader = new BufferedReader(new FileReader("/myfile.txt"));String line = reader.readLine();while (line != null) {System.out.println(line);line = reader.readLine();String[] splitLine = line.split("\\s+")如果數(shù)據(jù)由多個(gè)空格分隔,我通常會(huì)使用正則表達(dá)式替換 ->split('\\s+')或split(" +")。但在上述情況下,我有一條c沒有數(shù)據(jù)的記錄header。因此,正則表達(dá)式“\s+”或“+”將跳過該記錄,我將得到一個(gè)空白空間,而c,12L,11,437,M12不是c,12L,11,437,,M12在這種情況下,如何根據(jù)任何分隔符正確分割行,以便獲得以下格式的數(shù)據(jù):a,3w,12,98,header,P6124e,4t,2,100,header,I803c,12L,11,437,,M12誰能讓我知道如何實(shí)現(xiàn)這一目標(biāo)?
查看完整描述

3 回答

?
慕哥9229398

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

也許您可以嘗試使用更復(fù)雜的方法,使用復(fù)雜的正則表達(dá)式來匹配每行的六個(gè)字段,并顯式處理第五個(gè)字段缺失值的情況。我重寫了您的示例,添加了一些控制臺(tái)日志,以澄清我的建議:


public class RegexTest {

    private static final String Input = "a 3w 12 98 header P6124\n" +

            "e 4t 2  100 header I803\n" +

            "c 12L 11 437       M12";


    public static void main(String[] args) throws Exception {

        BufferedReader reader = new BufferedReader(new StringReader(Input));

        String line = null;

        Pattern pattern = Pattern.compile("^([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+)? +([^ ]+)$");


        do {

            line = reader.readLine();

            System.out.println(line);

            if(line != null) {

                String[] splitLine = line.split("\\s+");

                System.out.println(splitLine.length);


                System.out.println("Line: " + line);

                Matcher matcher = pattern.matcher(line);

                System.out.println("matches: " + matcher.matches());

                System.out.println("groups: " + matcher.groupCount());

                for(int i = 1; i <= matcher.groupCount(); i++) {

                    System.out.printf("   Group %d has value '%s'\n", i, matcher.group(i));

                }

            }

        } while (line != null);

    }

}

關(guān)鍵是用于匹配每一行的模式需要六個(gè)字段的序列:

  • 對(duì)于每個(gè)字段,值描述為[^ ]+

  • 字段之間的分隔符描述為+

  • 第五個(gè)(可為空)字段的值描述為[^ ]+?

  • 使用括號(hào)將每個(gè)值捕獲為一個(gè)組:( ... )

  • 每行的開始 ( ^) 和結(jié)束 ( ) 都被明確標(biāo)記$

然后,每一行都與給定的模式進(jìn)行匹配,獲得六個(gè)組:您可以使用 訪問每個(gè)組matcher.group(index),其中index是從1 開始的,因?yàn)?code>group(0)返回完全匹配。

這是一種更復(fù)雜的方法,但我認(rèn)為它可以幫助您解決問題。


查看完整回答
反對(duì) 回復(fù) 2023-07-28
?
富國滬深

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

對(duì)可用于分割輸入的空白字符數(shù)量進(jìn)行限制。

對(duì)于您的示例數(shù)據(jù),最多 5 個(gè)有效:

String[]?splitLine?=?line.split("\\s{1,5}");


查看完整回答
反對(duì) 回復(fù) 2023-07-28
?
慕蓋茨4494581

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

您只是想將分隔符從空格切換為逗號(hào)嗎?

在這種情況下: cat myFile.txt | sed 's/   */  /g' | sed 's/ /,/g'

*編輯:添加了一個(gè)階段來刪除超過兩個(gè)空格的列表,將它們替換為保留雙逗號(hào)所需的兩個(gè)空格。


查看完整回答
反對(duì) 回復(fù) 2023-07-28
  • 3 回答
  • 0 關(guān)注
  • 145 瀏覽

添加回答

舉報(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)