مشكلة مع مطابقة رمز في خط، وذلك باستخدام الماسح الضوئي في جاوة

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

  •  22-07-2019
  •  | 
  •  

سؤال

وأحتاج لمباراة أشياء معينة من خطوط لإدخال النص. خطوط تبدو مثل هذا:

 to be/ Σ _ Σ  [1pos, 1neg] {0=1, 2=1}

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

 Scanner scanner = new Scanner(file);
 while(scanner.hasNext()) {
      String line = scanner.nextLine();
      System.out.println("line: " + line);
      Pattern p_pos = Pattern.compile("to");
      Matcher m_pos = p_pos.matcher(line);
      String match = m_pos.group(0);
      System.out.println("match: " + match);
      boolean b_pos = m_pos.matches();
      if(b_pos) {
          System.out.println(match);
      }
 }

وإخراج:

line:    to be/ Σ _ Σ  [1pos, 1neg] {0=1, 2=1}
Exception in thread "main" java.lang.IllegalStateException: No match found
    at java.util.regex.Matcher.group(Matcher.java:485)
    at lady.PhrasesFromFile.readFile(PhrasesFromFile.java:31)
    at lady.PhrasesFromFile.main(PhrasesFromFile.java:17)

ولدي سؤال واحد: كيف يمكنني معالجة الخط بحيث تخزن كل شيء من بداية السطر حتى "/" الرمز الأول؟ لم أجد أي طريقة لذلك في API. هل ممكن عمل ذلك؟ أريد أساسا على التوالي للذهاب من خلال خط وتخزين قطع الخط في المتغيرات المختلفة، ومن ثم استخدام قيم هذه المتغيرات. وبما أنني لا أعرف كم رمز لدي قبل الرمز الأول "/"، لا يمكنني استخدام المقبل () عدد معين من المرات.

وشكرا لكم مقدما.

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

المحلول

و.matches() يحاول مطابقة <م> كامل سلسلة الإدخال. استخدام .find() إذا كنت تريد أن تطابق جزء من سلسلة الإدخال، أو .lookingAt() إذا كنت تريد أن تتطابق مع بداية السلسلة الإدخال.

HTTP: // جافا .sun.com / J2SE / 1.4.2 / مستندات / المعهد / جافا / UTIL / التعابير المنطقية / Matcher.html

وبالإضافة إلى ذلك، إذا قمت بتوسيع نمط لتشمل مطابقة مجموعة (انظر إشارة التعابير المنطقية العامة لمزيد من المعلومات حول كيفية عمل المجموعات مطابقة)، يمكنك استخدام وظيفة .group() بعد مباراة ناجحة لاسترداد سلسلة فرعية من قبل مجموعة معينة داخل مطابقة النمط.

نصائح أخرى

هل يمكن استخراج جزء تحتاج لالرموز باستخدام:

String tokenSection = Pattern.compile("(to\\s+.*?)/").matcher(line).find().group(1);

وثم حلقات على أن لاستخراج الرموز باستخدام

Pattern.compile("\\w+").matcher(tokenSection).find();

من الواضح أنك لن توصيل القطع المذكورة أعلاه من التعليمات البرمجية الحق فيها.

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