تمثيل ملف نصي كوحدة واحدة في Java، ومطابقة السلاسل في النص

StackOverflow https://stackoverflow.com/questions/821583

سؤال

كيف يمكنني الحصول على ملف نصي (أو ملف XML) ممثلاً كسلسلة كاملة، والبحث عن (أو مطابقة) سلسلة معينة فيه؟

لقد قمت بإنشاء كائن BufferedReader:

BufferedReader input =  new BufferedReader(new FileReader(aFile));

ثم حاولت استخدام فئة Scanner مع خيارها لتحديد محددات مختلفة، مثل هذا:

//Scanner scantext = new Scanner(input);
//Scanner scantext = new Scanner(input).useDelimiter("");
Scanner scantext = new Scanner(input).useDelimiter("\n");
while (scantext.hasNext()) {  ... }

باستخدام فئة الماسح الضوئي مثل هذه، يمكنني إما قراءة النص سطرًا تلو الآخر، أو كلمة بكلمة، لكن هذا لا يساعدني، لأنه في بعض الأحيان، في النص، الذي أريد معالجته،

</review><review>

وأود أن أقول:إذا وجدت "<review>" في أي مكان في النص، افعل شيئًا ما باستخدام الأسطر التالية (أو جزء من النص) حتى تجد "</review>".المشكلة هي <review> و </review> موجودة في أماكن مختلفة في النص، وأحيانًا يتم لصقها على نص آخر (وبالتالي فإن المساحة الفارغة كمحدد لا تساعدني).

لقد اعتقدت أنني قد أستخدم واجهة برمجة تطبيقات التعبير العادي في Java (فئات Pattern وMatcher)، ولكن يبدو أنها تتطابق مع سلسلة أو سطر معين، وأريد أن يكون النص كسلسلة واحدة متصلة (على الأقل كانت هذه انطباعاتي مما قرأت عنهم).هل يمكن أن تخبرني ما هي الهياكل/الأساليب/الفئات التي يجب أن أستخدمها في هذه الحالة؟شكرًا لك.

هل كانت مفيدة؟

المحلول

لا تحاول تحليل XML باستخدام التعبيرات العادية؛فهو لا يؤدي إلا إلى الألم.هناك الكثير من لطيف جدًا موجود XML واجهات برمجة التطبيقات في جافا بالفعل؛لماذا نحاول إعادة اختراعهم؟

على أية حال، للبحث عن سلسلة في ملف نصي، يجب عليك:

  1. قم بتحميل الملف كسلسلة (مثال)
  2. إنشاء Pattern للبحث عن
  3. إستخدم Matcher للتكرار من خلال أي مباريات

نصائح أخرى

ويبدو لي كما لو كنت تحاول العمل مع ملف xml منظم، وأن أقترح عليك أن تنظر في <لأ href = "http://java.sun.com/j2se/1.4.2/docs/ المعهد / javax / XML / موزعي / DocumentBuilder.html "يختلط =" نوفولو noreferrer "> javax.xml.parsers.DocumentBuilder أو غيرها التي بنيت في <لأ href =" http://java.sun.com/j2se /1.4.2/docs/api/org/w3c/dom/package-summary.html "يختلط =" نوفولو noreferrer "> واجهات برمجة التطبيقات للتحليل الوثيقة.

استخدم محلل XML.

وأو استخدام كسباث، كما هو الحال في هذه سبيل المثال .

<اقتباس فقرة>   

ولقد اعتقدت أنني قد تستخدم API التعبير العادية في جافا (على نمط والطبقات المنظر)، ولكن يبدو أنها تتطابق مع سلسلة أو خط معين، وأريد أن يكون النص كسلسلة واحدة مستمرة

وأم، لا شيء يمنعك من قراءة ملف XML إلى سلسلة، ومن ثم تعمل على ذلك، وذلك باستخدام API التعبير العادية؟

ويمكنك بسهولة قراءة ملف إلى سلسلة باستخدام مثل fileutils حكومة الوحدة من طراز أباتشي <أ href ل = "http://commons.apache.org/io/" يختلط = "نوفولو noreferrer"> العموم IO : انظر <لأ href = "http://commons.apache.org/io/api-release /org/apache/commons/io/FileUtils.html#readFileToString(java.io.File،٪20java.lang.String٪29 "يختلط =" نوفولو noreferrer "> readFileToString(File file, String encoding) .

وأود أيضا أن يوصي باستخدام API تحليل XML ... ولكن كما تريد فقط أن تفعل شيئا في حالة "مراجعة" علامة، ربما يمكن استخدام SAX أفضل من DOM ...

وأعتقد هنا، يمكننا نسخ خط الفردية في ملف نصي إلى سلسلة ثم محاولة لمطابقة فرعية (سلسلة البحث) مع سلسلة (خط)

ولكن ينتج خطأ أثناء excuting الأحرف الخاصة مثل / أو # الخ ..

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top