استبدل n و r n بـ
في java
-
27-09-2019 - |
سؤال
لقد تم طلب ذلك عدة مرات لعدة لغات ، لكن لا يمكنني تشغيله. لدي سلسلة مثل هذا
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
لقد استخدمت مائلين في العديد من مشاريعي ويبدو أنه يعمل بشكل جيد!