簡體   English   中英

Java掃描儀分隔符用法

[英]Java Scanner Delimiter Usage

我想為掃描器指定一個分隔符,該分隔符可以按某種模式進行拆分,但不會從令牌中刪除該模式。 我似乎無法完成這項工作,因為正則表達式所標識的所有內容也會作為分隔符被占用。 有什么建議么?

我的具體問題是,我的文件看起來像:

text/numbers mix
numbers
numbers
text/numbers mix
numbers
numbers
numbers
.
.

我想從文本/數字混合+行中分離出來,直到下一個文本/數字混合。 我有正則表達式來標識它們,但是如上所述,因為分隔符占用了我想要的部分,所以使用了它。

編輯:代碼添加:

static final String labelRegex="\\s*[^01\\s*]\\w+\\s*";
static final Pattern labelPattern = Pattern.compile(labelRegex, Pattern.MULTILINE);

是我用來識別文本/數字位的模式(我知道我的數字行包含所有1/0,用空格分隔)。

當我初始化掃描儀時:

stateScan = new Scanner(new BufferedReader(new FileReader(source)));
stateScan.useDelimiter(labelPattern);

吃掉標簽,然后離開行。 我目前有一個可行的實現,可以在來自同一源的兩個緩沖文件讀取器上啟動兩個掃描器,一個按狀態拆分,另一個按標簽拆分。 我真的希望它只是一個吸引人的標簽+州。

您可以在正則表達式中使用正面的外觀。 比賽中不包含前瞻性(和落后),因此掃描程序不會“吃掉”它們。 這個正則表達式可能會做你想要的:

(?=text/numbers)

分隔符將是在子字符串text/numbers之前的空字符串。

這是一個小演示:

public class Main {
    public static void main(String[] args) {
        String text = "text/numbers mix\n"+
                "numbers\n"+
                "numbers\n"+
                "text/numbers mix\n"+
                "numbers\n"+
                "numbers\n"+
                "numbers";
        String regex = "(?=text/numbers)";
        Scanner scan = new Scanner(text).useDelimiter(regex);
        while(scan.hasNext()) {
            System.out.println("------------------------");
            System.out.println(">"+scan.next().trim()+"<");
        }
    }
}

產生:

------------------------
>text/numbers mix
numbers
numbers<
------------------------
>text/numbers mix
numbers
numbers
numbers<

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM