[英]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.