كيف تقرأ عدد فردي من الخطوط من ملف نصي باستخدام Java؟
-
28-09-2019 - |
سؤال
لديّ ملف نصي حيث يحمل كل سطر غريب رقم عدد صحيح (سلسلة طبعه منذ أن في ملف نصي) ، حتى الخطوط لديها وقت. أريد فقط قراءة الأرقام ، وبالتالي فإن العدد الفردي للخطوط من ملف نصي. كيف يمكنني فعل ذلك؟
import java.io.*;
public class File {
BufferedReader in;
String read;
int linenum =12;
public File(){
try {
in = new BufferedReader(new FileReader("MAP_allData.txt"));
for (linenum=0; linenum<20; linenum++){
read = in.readLine();
if(read==null){}
else{
System.out.println(read); }
}
in.close();
}catch(IOException e){ System.out.println("There was a problem:" + e);
}
}
public static void main(String[] args){
File File = new File();
}
}
اعتبارا من الآن ، سوف تقرأ جميع الخطوط (الغريبة والمرحلية) حتى لا يكون هناك الآن للقراءة من (خالية)
نظرًا لأن خطوط الأرقام الخاصة بي هي طابع زمني مثل 13:44:23
فهل يمكنني فعل شيء مثل
if (read == null أو إذا كانت القراءة تتضمن وقتًا أو نصفًا) {} آخر {sop (read) ؛}
المحلول
بالتأكيد وضع بسيط in.readLine ()
قبل انتهاءك مباشرة for
-لوضع سفر هذا؟
بمعنى آخر:
for (linenum=0; linenum<20; linenum++) {
read = in.readLine();
if(read==null){}
else{
System.out.println(read);
}
in.readLine ();
}
نصائح أخرى
اقرأ في جميع الخطوط ، وتجاهل كل منها.
int lineNum = 0;
String line = null;
while ( (line = reader.readLine() ) != null ) {
lineNum++;
if ( lineNum % 2 == 0 ) continue;
//else deal with it
}
أو فقط اتصل readLine()
مرتين لكل حلقة ، متجاهلين للمرة الثانية ، وتجنب وجود عداد (آمن لأن جميع المكالمات لإعادة القراءة لاغية بعد الوصول إلى نهاية المباراة).
يحرر إذا كانت الكفاءة مفتاحًا تمامًا وكان لدى خطوط التاريخ تنسيق ثابت الطول ، فيمكنك استخدامه skip(15)
أو على غرار تخطي الخطوط التي لا تهتم بها بكفاءة.
لديك بالفعل linecounter ، لذلك إذا كنت ترغب في استخدام كل سطر آخر ، استخدم فحص Modulo
if((linenum % 2) == 1){
System.out.println(read);
}
ما عليك سوى القيام بشيء كهذا في كل مرة تقرأ فيها في السطر:
String str = read;
char[] all = str.toCharArray();
bool isInt = true;
for(int i = 0; i < all.length;i++) {
if(!Character.isDigit(all[i])) {
isInt = false;
}
else {
isInt = true;
}
}
if isInt {
//INTEGER LINE
} else {
//DO SOMETHING WITH THE TIME
}
هذا يجعل الكود ديناميكيا. إذا تغير الملف النصي ، وظهر الأعداد الصحيحة على أسطر مختلفة بدلاً من ذلك ، يمكن أن يظل الرمز الخاص بك كما هو.