سؤال

كيف تبحث عن كلمة معينة في ملف نصي في جافا؟ باستخدام قارئ مخزنة ، لدي هذا الرمز ، لكنني أحصل على ملف

java.lang.ArrayIndexOutOfBoundsException

الرجاء مساعدتي في تحديد الخطأ في برنامجي.

System.out.println("Input name: ");
      String tmp_name=input.nextLine();


        try{

             FileReader fr;
      fr = new FileReader (new File("F:\\names.txt"));
      BufferedReader br = new BufferedReader (fr);
String s;
while ((s = br.readLine()) != null) {

String[] st = s.split(" ");
String idfromtextfile=st[0];
String nemfromtextfile = st[1];
String scorefromtextfile=st[2];


if(nemfromtextfile.equals(tmp_name)){
    System.out.println("found");      
}else{
    System.out.println("not found");
}



      }

  }catch(Exception e){ System.out.println(e);}

names.txt يشبه هذا:

1
a
0

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

المحلول

يتوقع الكود الخاص بك أن يحتوي كل سطر في الملف على ثلاث كلمات مفصولة بالمساحة. لذلك يجب أن يبدو ملفك هكذا:

1 a 0
2 b 0

ال ArrayIndexOutOfBoundsException يحدث إذا كان هناك سطر في الملف لا يحتوي على ثلاث كلمات مفصولة بالمساحة. على سبيل المثال ، قد يكون هناك سطر فارغ في ملفك.

يمكنك التحقق من هذا في الكود الخاص بك مثل هذا:

if ( st.length != 3) {
    System.err.println("The line \"" + s + "\" does not have three space-separated words.");
}

نصائح أخرى

يمكنك استخدام مجموعة النمط/المطابقة الموصوفة هنا, ، أو جرب الماسح الضوئي. استخدم القارئ المخزنة مثل هذا:

BufferedReader in
   = new BufferedReader(new FileReader("foo.in"));

واستخراج السلسلة مع in.toString()

إذا كان النص ضخمًا ولم ترغب في قراءته مرة واحدة واحتفظ به في الذاكرة. يمكنك قراءة خط باستمرار مع readline () ، والبحث في كل من خط الإخراج لنمط ما.

فيما يلي مثال على كيفية القيام بذلك باستخدام BufferedReaderنص الارتباط

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