الاستخدام الماسح الضوئي Java
-
20-09-2019 - |
سؤال
أرغب في تحديد محدد للماسح الضوئي الذي ينقسم على بعض الأنماط ، ولكن لا يزيل هذا النمط من الرموز. لا يبدو لي أن أقوم بهذا العمل ، حيث يتم تناول أي شيء تم تحديده بواسطة Regex كجزء من المحدد. أي اقتراحات؟
مشكلتي المحددة ، لدي ملف يشبه:
text/numbers mix
numbers
numbers
text/numbers mix
numbers
numbers
numbers
.
.
أرغب في الانقسام من النصوص/الأرقام المزيج+صفوف حتى يختلط النص/الأرقام التالية. لديّ regex للتعرف عليهم ، ولكن كما ذكر ، باستخدام ذلك ، يأكل المحدد جزءًا مما أريد.
تحرير: إضافة رمز:
static final String labelRegex="\\s*[^01\\s*]\\w+\\s*";
static final Pattern labelPattern = Pattern.compile(labelRegex, Pattern.MULTILINE);
هو النمط الذي استخدمته لتحديد بت النص/الأرقام (أعرف أن صفوف الأرقام الخاصة بي تحتوي على جميع 1/0S مفصولة بالمسافات).
عندما أقوم بتهيئة الماسح الضوئي:
stateScan = new Scanner(new BufferedReader(new FileReader(source)));
stateScan.useDelimiter(labelPattern);
التي تأكل الملصقات ، وتترك الصفوف فقط. لدي حاليًا تطبيق عمل يبدأ ماسحات ضوئية على قراء ملفات مخزنة من نفس المصدر ، أحدهما تقسيم من قبل الدول والآخر حسب العلامات. أود حقًا أن تكون مجرد علامة واحدة للاستيلاء+.
المحلول
يمكنك استخدام نظرة إيجابية إلى الأمام في regex الخاص بك. لا يتم تضمين المضي قدمًا (والخلف) في المباراة ، لذلك لن يتم "تناولها" بواسطة الماسح الضوئي. من المحتمل أن تفعل هذا Regex ما تريد:
(?=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<