سؤال

لقد تم طلب ذلك عدة مرات لعدة لغات ، لكن لا يمكنني تشغيله. لدي سلسلة مثل هذا

String str = "This is a string.\nThis is a long string.";

وأنا أحاول استبدال \n مع <br /> استخدام

str = str.replaceAll("(\r\n|\n)", "<br />");

لكن ال \n لا يتم استبداله. حاولت استخدام هذا أداة regex للتحقق وأرى نفس النتيجة. لا تحتوي سلسلة الإدخال على تطابق مع "(\r\n|\n)". ما الخطأ الذي افعله ؟

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

المحلول

إنه يعمل بالنسبة لي.

public class Program
{
    public static void main(String[] args) {
        String str = "This is a string.\nThis is a long string.";
        str = str.replaceAll("(\r\n|\n)", "<br />");
        System.out.println(str);
    }
}

نتيجة:

This is a string.<br />This is a long string.

مشكلتك في مكان آخر.

نصائح أخرى

نسخة أكثر قوة قليلاً مما تحاول:

str = str.replaceAll("(\r\n|\n\r|\r|\n)", "<br />");

بالنسبة لي ، هذا نجح:

rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "\\\n");

نصيحة: استخدام regex tester للاختبار السريع دون تجميع في بيئتك

نظرًا لأن حسابي جديد ، لا يمكنني الحصول على إجابة Nino Van Hooff. إذا كانت الأوتار الخاصة بك تأتي من مصدر قائم على Windows مثل الخادم المستند إلى ASPX ، فإن هذا الحل يعمل:

rawText.replaceAll("(\\\\r\\\\n|\\\\n)", "<br />");

يبدو أن هناك مشكلة في مجموعة الأحرف الغريبة حيث يتم تفسير الزلاجات الخلفية المزدوجة على أنها شخصيات هروب مائلة واحدة. وبالتالي الحاجة إلى المائلة الرباعية أعلاه.

مرة أخرى ، في معظم الظروف "(\\r\\n|\\n)" يجب أن تعمل ، ولكن إذا كانت سلاسلك تأتي من مصدر قائم على Windows ، فحاول أعلاه.

حاول فقط FYI كل شيء لتصحيح المشكلة التي كنت أتعامل معها في استبدال نهايات الخط. الفكر في البداية كان فشل التحويل من Windows-1252 إلى UTF-8. لكن هذا لم ينجح أيضًا. هذا الحل هو ما فعلته أخيرًا الخدعة. قون

إنه يعمل بالنسبة لي. يعمل رمز Java تمامًا كما كتبته. في المختبر ، يجب أن تكون سلسلة الإدخال:

This is a string.
This is a long string.

... مع خط حقيقي. لا يمكنك استخدام:

This is a string.\nThis is a long string.

... لأنه يعامل \n كتسلسل حرفي التراجع "ن".

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

str  = str.replaceAll("(\r\n)", "<br />");
str  = str.replaceAll("(\n)", "<br />");

إخلاء المسئولية: هذا ليس فعالًا للغاية.

هذا يجب أن يعمل. تحتاج إلى وضع اثنين من المائل

str = str.replaceAll("(\\r\\n|\\n)", "<br />");

في هذا المرجعي, ، هناك مثال يظهر

private final String REGEX = "\\d"; // a single digit

لقد استخدمت مائلين في العديد من مشاريعي ويبدو أنه يعمل بشكل جيد!

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