2009-02-27 15 views
56

मेरे पास इसजावा स्ट्रिंग से लाइन वर्णों के अंत को हटा दें

"hello 
java 
book" 

की तरह स्ट्रिंग है I स्ट्रिंग (हैलो \ r \ njava \ r \ nbook) से \ r और \ n को हटाना चाहते हैं। मैं एक स्ट्रिंग को "hellojavabook" के रूप में चाहता हूँ। मैं यह कैसे कर सकता हूँ?

उत्तर

4

एक स्ट्रिंग str को देखते हुए?

+0

ज़ॉउंड्स। मुझे इससे हराएं! –

+2

यह करने के लिए यह एक अनावश्यक रूप से अक्षम तरीका है। –

2

आप replaceAll पद्धति का उपयोग करके रिक्त स्ट्रिंग के साथ \ N के किसी भी घटना या \ r को बदलने के लिए प्रयास किया है:

110

प्रतिस्थापन के साथ Regex सभी।

public class Main 
{ 
    public static void main(final String[] argv) 
    { 
     String str; 

     str = "hello\r\njava\r\nbook"; 
     str = str.replaceAll("(\\r|\\n)", ""); 
     System.out.println(str); 
    } 
} 

आप केवल जब वे जोड़े हैं दूर करने के लिए \ r \ n चाहते हैं (ऊपर कोड को निकालकर बाहर \ r या \ N) इस के बजाय कार्य करें:

str = str.replaceAll("\\r\\n", ""); 
+8

मैं आपको 'System.getProperty ("line.separator") का उपयोग करने की सलाह दूंगा;', हार्डकोडेड लाइन ब्रेकर के बजाय। प्रत्येक ओएस का अपना लाइन विभाजक होता है। – GGrec

+2

मुझे भी, लेकिन सवाल विशेष रूप से \ r और \ n ... – TofuBeer

+2

@GGrec कभी-कभी टेक्स्ट स्ट्रिंग/फ़ाइल उसी ओएस द्वारा नहीं बनाया गया था। तो 'System.getProperty ("line.separator"); इन मामलों में काम नहीं करेगा। लेकिन हाँ, अगर आप एक ही ओएस मूल पर भरोसा कर सकते हैं, तो सिस्टम प्रॉपर्टी का उपयोग करना बेहतर है। – Mindwin

10

आप से बचना चाहते हैं regex, या एक पहले JVM, String.replace() को लक्ष्य बनाना होगा करना होगा:

str=str.replace("\r","").replace("\n",""); 

और एक CRLF जोड़ी को दूर करने के:

str=str.replace("\r\n",""); 

उत्तरार्द्ध एक ही काम करने के लिए एक रेगेक्स बनाने से अधिक कुशल है। लेकिन मुझे लगता है कि पूर्व रेगेक्स के रूप में तेज़ होगा क्योंकि स्ट्रिंग केवल एक बार पार्स किया जाता है।

1
static byte[] discardWhitespace(byte[] data) { 
    byte groomedData[] = new byte[data.length]; 
    int bytesCopied = 0; 

    for (int i = 0; i < data.length; i++) { 
     switch (data[i]) { 
      case (byte) '\n' : 
      case (byte) '\r' : 
       break; 
      default: 
       groomedData[bytesCopied++] = data[i]; 
     } 
    } 

    byte packedData[] = new byte[bytesCopied]; 

    System.arraycopy(groomedData, 0, packedData, 0, bytesCopied); 

    return packedData; 
} 

कोड कॉमन्स-कोडेक परियोजना पर पाया गया। सभी प्रमुख और जब तक स्ट्रिंग में रिक्त स्थान झुकाव

-5

तुम कोशिश

string.trim(); 

यह ट्रिम करने के लिए है क्या। उम्मीद है की यह मदद करेगा।

संपादित करें:

इसलिए, जब आप string.split(), तो आपको एक स्ट्रिंग [] होगा (मैं काफी स्पष्ट नहीं था) - सरणी में तार से प्रत्येक के लिए, एक string.trim कर () और फिर इसे संलग्न करें।

String[] tokens = yourString.split(" "); 
StringBuffer buff = new StringBuffer(); 
for (String token : tokens) 
{ 
    buff.append(token.trim()); 
} 

स्ट्रिंगबफर/बिल्डर का उपयोग उसी स्ट्रिंग में जोड़ने के बजाय करें।

+0

काम नहीं किया यहाँ समस्या क्या है? ट्रिम सब कुछ ले जाता है और सिर्फ स्ट्रिंग देता है? –

+4

ट्रिम अग्रणी/पिछला सफेद स्थान हटा देता है। स्ट्रिंग के बीच में लाइन ब्रेक को हटाया नहीं जाएगा। – Joseph

9
public static void main(final String[] argv) 
{ 
    String str; 

    str = "hello\r\n\tjava\r\nbook"; 
    str = str.replaceAll("(\\r|\\n|\\t)", ""); 
    System.out.println(str); 
} 

यह रेगेक्स में भी सारणी जोड़ने के लिए उपयोगी होगा।

संबंधित मुद्दे