سؤال

أحاول تطهير سلسلة من أخرى.

before = before.replaceAll(Constants.GENE_START_SEQUENCE, "");

ومع ذلك ، فإن التأكيد التالي يفشل في بعض الأحيان:

assert before.indexOf(Constants.GENE_START_SEQUENCE) == -1 : before;

هذا ما يبصق عليه التأكيد:

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

المحلول

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

"XXYY".replaceAll("XY", "");

سيجد هذا حدث واحد من "xy" (في الفهرس 1) ثم استبدل ذلك بـ "". ستكون النتيجة "xy". إذا كنت ترغب في منع حدوث ذلك ، فيجب عليك إعادة replaceall ، حتى replaceAll يتوقف عن العثور على مباراة.

String string = "XXYY";
String oldString;
do {
  oldString = string;
  string = string.replaceAll("XY", "");
} while(!string.equals(oldString));
// string will now be ""

نصائح أخرى

يجب أن تتأكد من ذلك Constants.GENE_START_SEQUENCE هو نمط regex صالح. إذا لم يكن من المفترض أن يكون تعبيرًا منتظمًا ، فيجب عليك الهروب منه باستخدام طريقة الاقتباس على java.util.regex.pattern.

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