سؤال

حاولت هذا:

def str1="good stuff 1)"
def str2 = str1.replaceAll('\)',' ')

لكنني حصلت على الخطأ التالي:

استثناء org.codehaus.groovy.control.multipleCompilationErrorsexception: فشل بدء التشغيل ، script11.groovy: 3: char غير متوقع: '' @ السطر 3 ، العمود 29. 1 خطأ في org.codehaus.groovy.control.errorcollector (فشل: 296)

لذا فإن السؤال هو كيف أفعل هذا:

str1.replaceAll('\)',' ')
هل كانت مفيدة؟

المحلول

كما في جافا:

def str2 = str1.replaceAll('\\)',' ')

عليك الهروب من الذروة الخلفية (مع آخر مرة أخرى).

نصائح أخرى

طريقة أكثر مروعة: def str2 = str1.replaceAll(/\)/,' ')

عليك الهروب من \ داخل replaceAll

def str2 = str1.replaceAll('\\)',' ')

الإجابات الأخرى صحيحة لهذا المثال المحدد ؛ ومع ذلك ، في الحالات الحقيقية ، على سبيل المثال عند تحليل النتيجة باستخدام JsonSlurper أو XmlSlurper ثم استبدال حرف فيه ، يحدث الاستثناء التالي:

groovy.lang.MissingMethodException: No signature of method: java.util.ArrayList.replaceAll() is applicable for argument types

النظر في المثال التالي ،

def result = new JsonSlurper().parseText(totalAddress.toURL().text)

إذا أراد المرء استبدال شخصية مثل '(' في result مع ' ' على سبيل المثال ، يعيد التالي ما سبق Exception:

def subResult = result.replaceAll('\\(',' ')

هذا يرجع إلى حقيقة أن replaceAll الطريقة من Java تعمل فقط من أجل string الأنواع. لهذا العمل ، toString() يجب إضافة إلى نتيجة متغير محدد باستخدام def:

def subResult = result.toString().replaceAll('\\[',' ')
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top