java - नई लाइन द्वारा विभाजित जावा स्ट्रिंग





regex split newline (13)


यहां दिए गए सभी उत्तर वास्तव में नई लाइनों की जावा परिभाषा का सम्मान नहीं करते हैं जैसे कि BufferedReader # readline। जावा \n , \r और \r\n को नई लाइन के रूप में स्वीकार कर रहा है। कुछ उत्तर कई खाली लाइनों या विकृत फ़ाइलों से मेल खाते हैं। E..g। <sometext>\n\r\n<someothertext> [\r\n]+ का उपयोग करते समय परिणामस्वरूप दो पंक्तियां होंगी।

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

इसके विपरीत, उपर्युक्त उत्तर में निम्नलिखित गुण हैं:

  • यह एक नई लाइन की जावा परिभाषा का अनुपालन करता है जैसे कि BufferedReader इसका उपयोग कर रहा है
  • यह कई नई लाइनों से मेल नहीं खाता है
  • यह पिछली खाली रेखाओं को हटा नहीं देता है

मैं स्ट्रिंग को विभाजित करने के लिए एक regex का उपयोग कर JTextArea में पाठ को विभाजित करने की कोशिश कर रहा हूं \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 lines[] = String.split("\\r?\\n", -1);



पिछले उत्तरों के विकल्प के रूप में, अमरूद के Splitter एपीआई का उपयोग किया जा सकता है यदि अन्य परिचालनों को परिणामी लाइनों पर लागू किया जाना चाहिए, जैसे लाइनों को ट्रिम करना या खाली लाइनों को फ़िल्टर करना:

import com.google.common.base.Splitter;

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

ध्यान दें कि परिणाम एक Iterable और एक सरणी नहीं है।




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

यह प्रणाली स्वतंत्र होना चाहिए




सभी दिए गए समाधानों के आधार पर असफल प्रयासों के बाद। मैं \n कुछ विशेष शब्द के साथ प्रतिस्थापित करता हूं और फिर विभाजित करता हूं। मेरे लिए चाल चलने के बाद:

article = "Alice phoned\n bob.";
article = article.replace("\\n", " NEWLINE ");
String sen [] = article.split(" NEWLINE ");

मैं प्रश्न में दिए गए उदाहरण को दोहराना नहीं कर सका। लेकिन, मुझे लगता है कि यह तर्क लागू किया जा सकता है।




उपर्युक्त कोड वास्तव में कुछ भी दिखाई नहीं देता है - यह केवल कैलक्यूलेट्स गणना को डंप करता है। क्या यह आपके द्वारा उपयोग किया जाने वाला कोड है, या इस प्रश्न के लिए सिर्फ एक उदाहरण है?

अंत में textAreaDoc.insertString (int, स्ट्रिंग, विशेषता एसईटी) करने का प्रयास करें?




split विधि regex (नियमित अभिव्यक्ति) का उपयोग कर रहा है। चूंकि जावा 8 रेगेक्स \R का प्रतिनिधित्व करता है जो ( पैटर्न वर्ग के दस्तावेज से ) का प्रतिनिधित्व करता है:

लाइनब्रेक matcher
\ आर कोई यूनिकोड लाइनबैक अनुक्रम, \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029] बराबर है \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]

तो हम इसका मिलान करने के लिए उपयोग कर सकते हैं:

  • \u000D\000A -> \r\n जोड़ी
  • \u000A -> लाइन फ़ीड ( \n )
  • \u000B -> रेखा सारणी ( वर्ण सारणी \t साथ भ्रमित न करें जो \u0009 )
  • \u000C -> फॉर्म फ़ीड ( \f )
  • \u000D -> कैरिज रिटर्न ( \r )
  • \u0085 -> अगली पंक्ति ( \u0085 )
  • \u2028 -> रेखा विभाजक
  • \u2029 -> अनुच्छेद विभाजक

जैसा कि आप देखते हैं कि \r\n रेगेक्स की शुरुआत में रखा गया है जो सुनिश्चित करता है कि रेगेक्स पहले इस जोड़ी से मेल खाने का प्रयास करेगा, और केवल तभी विफल होगा जब यह एकल वर्ण रेखा विभाजक से मेल खाने का प्रयास करेगा।

तो यदि आप लाइन विभाजक उपयोग split("\\R") पर विभाजित करना चाहते हैं।

यदि आप परिणामी सरणी से रिक्त स्ट्रिंग्स का उपयोग नहीं करना चाहते हैं, तो split(regex, limit) उपयोग split("\\R", -1) जैसे नकारात्मक limit पैरामीटर के साथ करें।

यदि आप एकल या अधिक खाली लाइनों के साथ एक डिलीमीटर उपयोग split("\\R+") रूप में इलाज करना चाहते हैं।




आपको चरित्र समूहों में वर्णों से बचने की जरूरत नहीं है।

सभी गैर खाली लाइनों के लिए उपयोग करें:

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");



यदि आप खाली लाइन नहीं चाहते हैं:

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



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




शायद यह काम करेगा:

विभाजन विधि के पैरामीटर से डबल बैकस्लाश को हटाएं:

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



मान लें कि आप 'एक्स' के साथ सभी 'एबीसी' को प्रतिस्थापित करना चाहते हैं:

let some_str = 'abc def def lom abc abc def'.split('abc').join('x')
console.log(some_str) //x def def lom x x def

मैं स्ट्रिंग प्रोटोटाइप को संशोधित करने से कुछ और सरल के बारे में सोचने की कोशिश कर रहा था।







java regex split newline