تعلمنا في الفصل السابق كيفية استخدام كائنات فئة Scanner لتحليل البيانات في سلاسل، لذلك سنتعلم في هذا القسم كيفية استخدام كائنات فئة Scanner لتحليل البيانات في الملفات.
قد يحتاج التطبيق إلى تحليل البيانات الخاصة في الملف في هذا الوقت، ويمكن للتطبيق قراءة جميع محتويات الملف في الذاكرة ثم تحليل المحتوى المطلوب. والميزة هي أن سرعة المعالجة سريعة، ولكن إذا تمت قراءتها المحتوى كبير، وسوف يستهلك المزيد من الذاكرة مما يعني استبدال المساحة بالوقت.
يقدم هذا القسم بشكل أساسي كيفية استخدام فئة Scanner والتعبيرات العادية لتحليل الملفات، على سبيل المثال، لتحليل الكلمات الخاصة والأرقام والمعلومات الأخرى الموجودة في الملف. إن خاصية استخدام فئة Scanner والتعبيرات العادية لتحليل الملفات هي أنه يتم استبدال الوقت بالمساحة، أي أن سرعة التحليل بطيئة نسبيًا، ولكن يتم حفظ الذاكرة.
قم بإنشاء كائن Scanner وأشر إلى الملف المراد تحليله، على سبيل المثال:
Filefile=newFile(hello.java);Scannersc=newScanner(file);
ثم يستخدم sc المسافات كمحددات ويستدعي الطريقة التالية () لإرجاع الكلمات الموجودة في الملف بالتسلسل. إذا تم إرجاع الكلمة الأخيرة من الملف بواسطة الطريقة التالية ()، فإن sc تستدعي hasNext () لإرجاع خطأ، وإلا فإنها ترجع. حقيقي.
بالإضافة إلى ذلك، بالنسبة للكلمات الرقمية، مثل 108، 167.92، وما إلى ذلك، يمكنك استخدام طريقة nextInt() أو nextDouble() بدلاً من الطريقة التالية()، أي أنه يمكن لـ sc استدعاء nextInt() أو nextDouble() يتم إرجاع طريقة لتحويل الكلمات الرقمية إلى بيانات int أو Double، ولكن من المهم ملاحظة أنه إذا لم تكن الكلمة كلمة رقمية، فسيحدث InputMismatchException عند استدعاء الأسلوب nextInt() أو nextDouble() عند معالجة الاستثناء ، يمكن استدعاء الطريقة التالية () لإرجاع الكلمة غير الرقمية.
قم بإنشاء كائن Scanner، وأشر إلى الملف المراد تحليله، واستخدم طريقة useDelimiter لتحديد التعبير العادي كعلامة فاصلة، على سبيل المثال:
Filefile=newFile(hello.java);Scannersc=newScanner(file);sc.useDelimiter(regular Express);
ثم يستخدم sc التعبير العادي كمحدد ويستدعي الطريقة التالية () لإرجاع الكلمات الموجودة في الملف بالتسلسل. إذا تم إرجاع الكلمة الأخيرة من الملف بواسطة الطريقة التالية ()، فإن sc تستدعي hasNext () وهي كذلك سيعود كاذبا، وإلا فإنه سيعود صحيحا.
بالإضافة إلى ذلك، بالنسبة للكلمات الرقمية، مثل 1979، 0.618، وما إلى ذلك، يمكنك استخدام طريقة nextInt() أو nextDouble() بدلاً من الطريقة التالية()، أي أنه يمكن لـ sc استدعاء nextInt() أو nextDouble() يتم إرجاع طريقة لتحويل الكلمات الرقمية إلى بيانات int أو Double، ولكن من المهم ملاحظة أنه إذا لم تكن الكلمة كلمة رقمية، فسيحدث InputMismatchException عند استدعاء الأسلوب nextInt() أو nextDouble() ثم عند التعامل مع الطريقة استثناءً، يمكنك استدعاء الأسلوب التالي () لإرجاع الكلمة غير الرقمية.
على سبيل المثال، استخدم التعبير العادي (يطابق كافة السلاسل غير الرقمية) String regex=[^0123456789.]+ كعلامة محددة لتحليل درجات الطالب في ملف Student.txt وحساب متوسط الدرجة.
Student.txt
نقاط Zhang San هي 70 نقطة، ونقاط Li Si 80 نقطة، ونقاط Zhao Wu 90 نقطة.
الرمز هو كما يلي:
importjava.io.*;importjava.util.*;publicclassMain{publicstaticvoidmain(Stringargs[]){Filefile=newFile(student.txt);Scannersc=null;intcount=0;doublesum=0;try{doublescore=0;sc= newScanner(file);sc.useDelimiter([^0123456789.]+);while(sc.hasNextDouble()){score=sc.nextDouble();count++;sum=sum+score;System.out.println(score) ;}doubleaver=sum/count;System.out.println(متوسط النتيجة:+aver);}catch(Exceptionexp){System.out.println(exp);}}}