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

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

使用多個正則表達(dá)式:按出現(xiàn)的順序一次打印一個匹配項(xiàng)

使用多個正則表達(dá)式:按出現(xiàn)的順序一次打印一個匹配項(xiàng)

MMTTMM 2023-06-21 14:57:26
給定一個字符串,我想按照掃描的順序匹配標(biāo)記,而不是通過循環(huán)無序打印特定類型標(biāo)記的所有匹配項(xiàng)。目前,我在 for-each 循環(huán)中迭代一個字符串?dāng)?shù)組。我有捕獲所有必要標(biāo)記的正則表達(dá)式,但不是按照它們出現(xiàn)的順序。這是我所擁有的。for-each 循環(huán)調(diào)用findTokens查找所有該標(biāo)記類型的函數(shù)。這是錯誤的,因?yàn)橄襁@樣它通過正則表達(dá)式匹配而不是它們出現(xiàn)的順序來查找令牌。for(String line: lines) {...findTokens(line, keyword);findTokens(line, identifier);findTokens(line, number);}這是我的 findTokens 函數(shù)。它接受一個字符串和一個正則表達(dá)式。它檢查 Regex 參數(shù)是否等于 Regex 聲明之一(未顯示)。public static void findTokens(String str, String regex) {        String keyword = "(else)+|(if)+|(int)+|(return)+|(void)+|(while)+|(main)+";        String identifier = "\\b(?!(else)|(if)|(int)|(return)|(void)|(while)|(main))\\b[a-zA-Z]+";        String number = "[\\d]+";        Pattern pattern = Pattern.compile(regex);        Matcher matcher = pattern.matcher(str);        if (regex.equals(keyword) ) {            while ( matcher.find() ) { System.out.println("Keyword: " + matcher.group()); }        } else if ( regex.equals(identifier) ) {            while ( matcher.find() ) { System.out.println("ID: " + matcher.group()); }        } else if ( regex.equals(number) ) {            while ( matcher.find() ) { System.out.println("NUM: " + matcher.group()); }        }    }預(yù)期輸出:INPUT: int g 4 cd int u int vkeyword: intID: gNUM: 4ID: cdkeyword: intID: ukeyword: intID: v實(shí)際輸出:INPUT: int g 4 cd int u int vkeyword: intkeyword: intkeyword: intID: gID: cdID: uID: vNUM: 4
查看完整描述

1 回答

?
撒科打諢

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個贊

將它們組合成一個大的正則表達(dá)式,如下所示:


package test;


import java.nio.file.Files;

import java.nio.file.Paths;

import java.util.regex.Matcher;

import java.util.regex.Pattern;


public class Test {

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

        String input = Files.readString(Paths.get("src/main/java/test/Test.java"));


        String keyword = "\\b(?:else|if|int|return|void|while|for|package|import|public|protected|private|static|class|throws)\\b";

        String identifier = "\\b[a-zA-Z][a-zA-Z0-9]*\\b";

        String number = "-?\\b[\\d]+\\b";

        String regex = "(" + keyword + ")|(" + identifier + ")|(" + number + ")";

        Pattern pattern = Pattern.compile(regex);

        for (Matcher m = pattern.matcher(input); m.find(); ) {

            if (m.start(1) != -1)

                System.out.println("Keyword: " + m.group());

            else if (m.start(2) != -1)

                System.out.println("Identifier: " + m.group());

            else

                System.out.println("Number: " + m.group());

        }

    }

}

該代碼使用自己的源代碼作為測試,因此輸出為:


Keyword: package

Identifier: test

Keyword: import

Identifier: java

Identifier: nio

Identifier: file

Identifier: Files

Keyword: import

Identifier: java

Identifier: nio

Identifier: file

Identifier: Paths

Keyword: import

Identifier: java

Identifier: util

Identifier: regex

Identifier: Matcher

Keyword: import

Identifier: java

Identifier: util

Identifier: regex

Identifier: Pattern

Keyword: public

Keyword: class

Identifier: Test

Keyword: public

Keyword: static

Keyword: void

Identifier: main

Identifier: String

Identifier: args

Keyword: throws

Identifier: Exception

Identifier: String

Identifier: input

Identifier: Files

Identifier: readString

Identifier: Paths

Identifier: get

Identifier: src

Identifier: main

Identifier: java

Identifier: test

Identifier: Test

Identifier: java

Identifier: String

Identifier: keyword

Identifier: b

Keyword: else

Keyword: if

Keyword: int

Keyword: return

Keyword: void

Keyword: while

Keyword: for

Keyword: package

Keyword: import

Keyword: public

Keyword: protected

Keyword: private

Keyword: static

Keyword: class

Keyword: throws

Identifier: b

Identifier: String

Identifier: identifier

Identifier: b

Identifier: a

Identifier: zA

Identifier: Z

Identifier: a

Identifier: zA

Identifier: Z0

Number: -9

Identifier: b

Identifier: String

Identifier: number

Identifier: b

Identifier: d

Identifier: b

Identifier: String

Identifier: regex

Identifier: keyword

Identifier: identifier

Identifier: number

Identifier: Pattern

Identifier: pattern

Identifier: Pattern

Identifier: compile

Identifier: regex

Keyword: for

Identifier: Matcher

Identifier: m

Identifier: pattern

Identifier: matcher

Identifier: input

Identifier: m

Identifier: find

Keyword: if

Identifier: m

Identifier: start

Number: 1

Number: -1

Identifier: System

Identifier: out

Identifier: println

Identifier: Keyword

Identifier: m

Identifier: group

Keyword: else

Keyword: if

Identifier: m

Identifier: start

Number: 2

Number: -1

Identifier: System

Identifier: out

Identifier: println

Identifier: Identifier

Identifier: m

Identifier: group

Keyword: else

Identifier: System

Identifier: out

Identifier: println

Identifier: Number

Identifier: m

Identifier: group



查看完整回答
反對 回復(fù) 2023-06-21
  • 1 回答
  • 0 關(guān)注
  • 229 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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