एक स्ट्रिंग की शुरुआत और अंत से नए सिरे को कैसे हटाएं?


129

मेरे पास एक स्ट्रिंग है जिसमें कुछ पाठ है जिसमें एक रिक्त पंक्ति है। पाठ के साथ भाग रखने का सबसे अच्छा तरीका क्या है, लेकिन व्हाट्सएप की नई लाइन को अंत से हटा दें?



1
नहीं यह नहीं। लिंक में सवाल 'जगह' के बारे में पूछ रहा है ..
फैज़

जवाबों:


277

String.trim()स्ट्रिंग की शुरुआत और अंत से व्हाट्सएप (रिक्त स्थान, नई लाइनें आदि) से छुटकारा पाने के लिए विधि का उपयोग करें ।

String trimmedString = myString.trim();

18
सवाल नईलाइन्स को लेकर है। यह सिर्फ नए समाचारों से अधिक को दूर करता है
एमएमएम

21
String.replaceAll("[\n\r]", "");

14
Bro, @JohnB यह स्ट्रिंग के बीच के सभी नए लाइन कैरेक्टर को भी हटा देगा। पूछना केवल प्रमुख और नई लाइन चरित्र को पीछे हटाने के लिए है।
सिद्धार्थ

5

tl; डॉ

String cleanString = dirtyString.strip() ; // Call new `String::string` method.

String::strip…

पुरानी String::trimविधि में व्हॉट्सएप की एक अजीब परिभाषा है ।

जैसा कि यहां चर्चा की गई है , जावा 11 कक्षा में नए strip…तरीके जोड़ता है String। ये व्हॉट्सएप की एक अधिक यूनिकोड-प्रेमी परिभाषा का उपयोग करते हैं। के लिए JavaDoc में इस परिभाषा के नियम देखें Character::isWhitespace

उदाहरण कोड।

String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");

या आप सिर्फ अग्रणी या सिर्फ अनुगामी व्हाट्सएप पट्टी कर सकते हैं ।

आपने ठीक-ठीक उल्लेख नहीं किया है कि कौन-सी कोड बिंदु आपके नए अंक बनाती है। मुझे लगता है कि आपके द्वारा लक्षित लक्ष्य बिंदुओं की सूची में आपकी नई पंक्ति शामिल होने की संभावना है strip:

  • यह एक यूनिकोड स्पेस कैरेक्टर (SPACE_SEPARATOR, LINE_SEPARATOR, या PARAGRAPH_SEPARATOR) है, लेकिन यह नॉन-ब्रेकिंग स्पेस ('\ u00A0', 'u2007', '\ u202F') भी नहीं है।
  • यह '\ t', U + 0009 HORIZONTAL TABULATION है।
  • यह '\ n', U + 000A LINE FEED है।
  • यह '\ u000B', U + 000B VERTICAL TABULATION है।
  • यह '\ f', U + 000C FORM FEED है।
  • यह '\ r', U + 000D CARRAGE RETURN है।
  • यह '\ u001C', U + 001C FILE SEPARATOR है।
  • यह '\ u001D', U + 001D ग्रुप सेपरेटर है।
  • यह '\ u001E', U + 001E RECORD SEPARATOR है।
  • यह '\ u001F', U + 0 है

4

यह जावा कोड वही करता है जो प्रश्न के शीर्षक में पूछा जाता है, जो "एक स्ट्रिंग-जावा की शुरुआत और अंत से नई सूची हटाता है":

String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")

केवल पंक्ति के अंत से नई सूची निकालें:

String.replaceAll("[\n\r]$", "")

लाइन की शुरुआत से ही नई सूची निकालें:

String.replaceAll("^[\n\r]", "")

क्या आप अपने उत्तर के लिए अतिरिक्त संदर्भ प्रदान कर सकते हैं? इस तरह हर कोई समझ सकता है कि आपका कोड क्या करता है और क्यों।
मारियानो ज़ोरिल्ला

मैंने अपने उत्तर में स्पष्टीकरण जोड़ दिए हैं। मुझे उम्मीद है कि अब यह स्पष्ट है।
अलेक्जेंडर समोयलोव

2

यदि आपकी स्ट्रिंग संभावित है null, तो उपयोग करने पर विचार करें StringUtils.trim()- का शून्य-सुरक्षित संस्करण String.trim()


1
String trimStartEnd = "\n TestString1 linebreak1\nlinebreak2\nlinebreak3\n TestString2 \n";
System.out.println("Original String : [" + trimStartEnd + "]");
System.out.println("-----------------------------");
System.out.println("Result String : [" + trimStartEnd.replaceAll("^(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])|(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])$", "") + "]");
  1. एक स्ट्रिंग की शुरुआत = ^,
  2. एक स्ट्रिंग का अंत = $,
  3. regex संयोजन = | ,
  4. लाइनब्रेक = \ r \ n | [\ n \ x0B \ x0C \ r \ u0085 \ u2028 \ u2029]

0

मैं इसके साथ ही एक उत्तर भी जोड़ने जा रहा हूं, क्योंकि मेरे पास एक ही प्रश्न था, बशर्ते उत्तर पर्याप्त नहीं था। कुछ विचार को देखते हुए, मैंने महसूस किया कि यह नियमित अभिव्यक्ति के साथ बहुत आसानी से किया जा सकता है।

शुरुआत से नई कड़ियाँ निकालने के लिए :

// Trim left
String[] a = "\n\nfrom the beginning\n\n".split("^\\n+", 2);

System.out.println("-" + (a.length > 1 ? a[1] : a[0]) + "-");

और एक स्ट्रिंग का अंत:

// Trim right
String z = "\n\nfrom the end\n\n";

System.out.println("-" + z.split("\\n+$", 2)[0] + "-");

मुझे यकीन है कि यह किसी स्ट्रिंग को ट्रिम करने का सबसे अधिक कुशल तरीका नहीं है। लेकिन यह इस तरह के एक ऑपरेशन को इनलाइन करने के लिए सबसे साफ और सरल तरीका प्रतीत होता है।

ध्यान दें कि किसी भी भिन्नता और वर्णों के संयोजन को ट्रिम करने के लिए एक ही विधि की जा सकती है, क्योंकि यह एक साधारण रेगेक्स है।


हाँ, लेकिन क्या होगा अगर आपको नहीं पता कि शुरुआत / अंत में कितनी लाइनें हैं? आपका समाधान मानता है कि दोनों मामलों में बिल्कुल 2 नई
खबरें हैं

का दूसरा पैरामीटर split()सिर्फ सीमा है। यदि आप असीमित बार मिलान करना चाहते हैं तो इसे छोड़ दें।
झेरो

0

इसे इस्तेमाल करे

function replaceNewLine(str) { 
  return str.replace(/[\n\r]/g, "");
}

0

यदि आप केवल एक स्ट्रिंग (inbetween नहीं) की शुरुआत और अंत में लाइन ब्रेक (रिक्त स्थान, टैब नहीं) निकालना चाहते हैं , तो आप इस दृष्टिकोण का उपयोग कर सकते हैं:

एक स्ट्रिंग के प्रारंभ ( ) और समाप्ति ( ) से कैरिज रिटर्न ( \\r) और लाइन फीड ( \\n) को हटाने के लिए एक नियमित अभिव्यक्ति का उपयोग करें :^$

 s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "")

पूरा उदाहरण:

public class RemoveLineBreaks {
    public static void main(String[] args) {
        var s = "\nHello\nWorld\n";
        System.out.println("before: >"+s+"<");
        s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "");
        System.out.println("after: >"+s+"<");
    }
}

यह आउटपुट:

before: >
Hello
World
<
after: >Hello
World<

-3
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");

2
यह प्रश्न का सही उत्तर नहीं देता है। यह केवल शुरुआत और अंत में ही नहीं, बल्कि सभी सीआर और एलएफ को हटा देता है।
james.garriss

यह केवल शुरुआत और अंत से ही नहीं, सभी को बदल देगा।
हम्जेह सोबोह
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.