كيف تقرأ عدد فردي من الخطوط من ملف نصي باستخدام Java؟

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

  •  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
}

هذا يجعل الكود ديناميكيا. إذا تغير الملف النصي ، وظهر الأعداد الصحيحة على أسطر مختلفة بدلاً من ذلك ، يمكن أن يظل الرمز الخاص بك كما هو.

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