regex - Split Java String بواسطة New Line





newline (13)


للحفاظ على الخطوط الفارغة من الاستخدام الممرر:

String lines[] = String.split("\\r?\\n", -1);

أحاول تقسيم النص في JTextArea باستخدام regex لتقسيم String بواسطة \n ومع ذلك ، فإن هذا لا يعمل كما أنني حاولت استخدام \r\n|\r|n والعديد من المجموعات الأخرى من regexes. الشفرة:

public void insertUpdate(DocumentEvent e) {
    String split[], docStr = null;
    Document textAreaDoc = (Document)e.getDocument();

    try {
        docStr = textAreaDoc.getText(textAreaDoc.getStartPosition().getOffset(), textAreaDoc.getEndPosition().getOffset());
    } catch (BadLocationException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    split = docStr.split("\\n");
}



ليس عليك مضاعفة أحرف الهروب في مجموعات الأحرف.

بالنسبة إلى جميع الأسطر غير الفارغة ، استخدم:

String.split("[\r\n]+")



  • حاول هذا الأمل كان مفيدًا لك
 String split[], docStr = null;
Document textAreaDoc = (Document)e.getDocument();

try {
    docStr = textAreaDoc.getText(textAreaDoc.getStartPosition().getOffset(), textAreaDoc.getEndPosition().getOffset());
} catch (BadLocationException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
}

split = docStr.split("\n");



package in.javadomain;

public class JavaSplit {

    public static void main(String[] args) {
        String input = "chennai\nvellore\ncoimbatore\nbangalore\narcot";
        System.out.println("Before split:\n");
        System.out.println(input);

        String[] inputSplitNewLine = input.split("\\n");
        System.out.println("\n After split:\n");
        for(int i=0; i<inputSplitNewLine.length; i++){
            System.out.println(inputSplitNewLine[i]);
        }
    }

}



جميع الإجابات المقدمة هنا لا تحترم فعليًا تعريف Javas للخطوط الجديدة كما هو موضح في مثال: BufferedReader # readline. تقبل Java \n ، \r و \r\n كخط جديد. تتطابق بعض الإجابات مع عدة أسطر فارغة أو ملفات مشوهة. E..g. <sometext>\n\r\n<someothertext> عند استخدام [\r\n]+ سيؤدي إلى سطرين.

String lines[] = string.split("(\r\n|\r|\n)", -1);

في المقابل ، تحتوي الإجابة أعلاه على الخصائص التالية:

  • أنه يتوافق مع تعريف Javas لخط جديد مثل على سبيل المثال BufferedReader يستخدمه
  • لا يطابق عدة أسطر جديدة
  • لا يزيل زائدة الخطوط الفارغة



هذا يجب أن يغطي لك:

String lines[] = string.split("\\r?\\n");

لا يوجد سوى خطين جديدين فقط (UNIX و Windows) تحتاجين إلى القلق بشأنه.




String lines[] =String.split( System.lineSeparator())




String.split(System.getProperty("line.separator"));

يجب أن يكون هذا النظام مستقلاً




إذا كنت لا تريد خطوط فارغة:

String.split("[\\r\\n]+")



إذا كنت لا تريد ، لسبب ما ، استخدام String.split (على سبيل المثال ، بسبب التعبيرات العادية ) وتريد استخدام البرمجة الوظيفية على Java 8 أو الأحدث:

List<String> lines = new BufferedReader(new StringReader(string))
        .lines()
        .collect(Collectors.toList());



الشفرة المذكورة أعلاه لا تفعل في الواقع أي شيء مرئي - انها فقط calcualtes ثم تفريغ عملية الحساب. هل هو الرمز الذي استخدمته أم مجرد مثال لهذا السؤال؟

حاول أن تفعل textAreaDoc.insertString (int، String، AttributeSet) في النهاية؟




كبديل للأجوبة السابقة ، يمكن استخدام واجهة برمجة التطبيقات (Guava's Splitter API) في حالة تطبيق العمليات الأخرى على الخطوط الناتجة ، مثل تشذيب الخطوط أو ترشيح الخطوط الفارغة:

import com.google.common.base.Splitter;

Iterable<String> split = Splitter.onPattern("\r?\n").trimResults().omitEmptyStrings().split(docStr);

لاحظ أن النتيجة هي Iterable وليس مصفوفة.




هذا لطيف لأن:

  • سلامة اليد و charset.
  • يمكنك التحكم في حجم المخزن المؤقت للقراءة.
  • يمكنك توفير طول البناء ويمكن أن لا يكون بالضبط.
  • خالي من اعتمادات المكتبات.
  • هو لجافا 7 أو أعلى.

ماذا عن؟

public static String convertStreamToString(InputStream is) {
   if (is == null) return null;
   StringBuilder sb = new StringBuilder(2048); // Define a size if you have an idea of it.
   char[] read = new char[128]; // Your buffer size.
   try (InputStreamReader ir = new InputStreamReader(is, StandardCharsets.UTF_8)) {
     for (int i; -1 != (i = ir.read(read)); sb.append(read, 0, i));
   } catch (Throwable t) {}
   return sb.toString();
}






java regex split newline