باستخدام الماسح الضوئي في Java كيف يمكنني الحصول على Hasnext (rogring) حيث لا توجد سلسلة نمط Regex؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

أحاول أن أفعل كأحرف بلدي، سوو لدي التعليمات البرمجية التالية التي ستجد المباراة.

String test = scan.next();
if (test.equals("$let"))
return 1;

ومع ذلك، أفضل استخدام hasnext لعدم تستهلك الرمز المميز؛ ومع ذلك، عندما أقوم بما يلي فشل.
if (scan.hasNext("$let"))
return 1;

أدرك عند تقديم المتغير التالي، فإنه يتوقع نمطا، لكنني اعتقدت إذا لم يكن لدي أي رموز Regex يجب أن تعمل. اعتقدت أيضا أن $ كان ربما بعض رمز Regex لذلك حاولت / $، وهذا لم ينجح!

شكرا للمساعدة!

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

المحلول

يجب عليك استخدام $ للهروب من Regex، ولكن من الأسهل فقط الحصول على التالي () وحفظ النتيجة.

نصائح أخرى

بشكل عام، إذا كان لديك بعض السلسلة التعسفية التي تريد مطابقتها حرفيا دون أي معاني لأي metacharacters Regex، يمكنك استخدامها java.util.Pattern.quote.

Scanner sc = new Scanner("$)}**");
System.out.println(sc.hasNext(Pattern.quote("$)}**"))); // prints "true"
System.out.println(sc.hasNext("\\Q$)}**\\E")); // prints "true"
System.out.println(sc.hasNext("$)}**")); // throws PatternSyntaxException

يمكنك أيضا استخدام \Q و \E علامات الاقتباس، ولكن بالطبع تحتاج إلى التأكد من أن السلسلة المعروضة يجب أن لا تحتوي نفسها \E.

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