जावा में तार से व्हाट्सएप को हटाना


684

मेरे पास एक स्ट्रिंग है जैसे:

mysz = "name=john age=13 year=2001";

मैं स्ट्रिंग में व्हाट्सएप को हटाना चाहता हूं। मैंने कोशिश की trim()लेकिन यह पूरी स्ट्रिंग से पहले और बाद में केवल व्हाट्सएप को हटाता है। मैंने भी कोशिश की replaceAll("\\W", "")लेकिन फिर =भी हट जाता है।

मैं कैसे एक स्ट्रिंग प्राप्त कर सकता हूं:

mysz2 = "name=johnage=13year=2001"

1
\\Wमतलब है कि सभी गैर-शब्द को देखने के download.oracle.com/javase/6/docs/api/java/util/regex/...
निशांत

75
"Name = johnage = 13year = 2001" स्ट्रिंग के साथ आपकी क्या योजना है? यह मुझे उम्मीद नहीं है।
जोनास एल्फ्रॉस्टेम

4
@ JonasElfström मैं इसकी तुलना स्ट्रिंग की मदद से करने की कल्पना करता हूं
आइजैक

कैसे के बारे में अगर स्ट्रिंग वास्तव में = "" है। क्या सभी ट्रिम्स () खाली स्ट्रिंग को ठीक कर रहा है जैसे कि मैंने उल्लेख किया है? @ यजमत?
गमरूह

जवाबों:


1289

st.replaceAll("\\s+","")सभी व्हाट्सएप और गैर-दृश्य वर्ण (जैसे, टैब \n) को हटा देता है ।


st.replaceAll("\\s+","")और st.replaceAll("\\s","")उसी परिणाम का उत्पादन करें।

दूसरा रेगेक्स पहले वाले की तुलना में 20% तेज है, लेकिन जैसे-जैसे संख्या लगातार बढ़ रही है, पहला वाला दूसरे से बेहतर प्रदर्शन करता है।


एक चर के लिए मान असाइन करें, अगर सीधे उपयोग नहीं किया जाता है:

st = st.replaceAll("\\s+","")

34
मैं यह नोट करना चाहूंगा कि यदि आप सभी व्हॉट्सएप को एक ही स्थान (या कुछ अन्य वर्णों के सेट) से बदलना चाहते हैं, तो ये दो रेगेक्स अलग परिणाम देंगे। यदि आपके पास लगातार स्थान हैं, तो \\ का उपयोग करके यह प्रत्येक व्हाट्सएप चरित्र को दिए गए वर्णों के साथ बदल देगा। यह देखते हुए कि यह एक प्रतिस्थापन स्ट्रिंग के साथ व्हॉट्सएप के प्रत्येक सेट को बदल देगा। मैं काफी कुछ मामला देख सकता हूं, जहां लोग इस पोस्ट पर व्हाट्सएप को ऐसी जगह ले जा रहे हैं, जो सिर्फ एक खाली स्ट्रिंग नहीं है, और यह मददगार हो सकता है।
केटलीन

2
लेकिन यह सफ़ेद-स्थान को नहीं हटाता है यदि यह स्ट्रिंग की शुरुआत में है।
अकेला

इसके लिए @lonesome उपयोग .trim ()
CQM

6
बस Apache-commons से StringUtils का उपयोग करें। इसकी एक स्थिर विधि जिसे StringUtils.deleteWhitespace कहा जाता है।
क्रोझेटा

@ रेसेल के जवाब और प्रदर्शन की तुलना के लिए @Gursel धन्यवाद। मैं सोच रहा था कि दो के बीच एक प्रदर्शन अंतर क्यों है? क्या कुछ ऐसा है जो मुझे याद आ रहा है, क्या आप कृपया मुझे किसी भी संदर्भ को इंगित कर सकते हैं जो प्रदर्शन के अंतर के बारे में अधिक बात करता है।
विश्रांत

247
replaceAll("\\s","")

\w = जो कुछ भी एक शब्द चरित्र है

\W = जो कुछ भी एक शब्द चरित्र नहीं है (विराम चिह्न आदि सहित)

\s = कुछ भी जो एक अंतरिक्ष वर्ण है (अंतरिक्ष, टैब वर्ण आदि सहित)

\S = जो कुछ भी एक अंतरिक्ष चरित्र नहीं है (पत्र और संख्या दोनों के साथ-साथ विराम चिह्न आदि)

(संपादित करें: जैसा कि बताया गया है, यदि आप \sरेगेक्स इंजन तक पहुंचना चाहते हैं, तो आपको बैकस्लैश से बचना होगा , जिसके परिणामस्वरूप \\s)।


103

प्रश्न का सबसे सही उत्तर है:

String mysz2 = mysz.replaceAll("\\s","");

मैंने अभी दूसरे उत्तरों से इस कोड को अनुकूलित किया है। मैं इसे पोस्ट कर रहा हूं क्योंकि वास्तव में प्रश्न का अनुरोध करने के अलावा, यह यह भी दर्शाता है कि परिणाम एक नई स्ट्रिंग के रूप में वापस आ गया है, मूल स्ट्रिंग को संशोधित नहीं किया गया है को थोड़े से उत्तरों की तरह गया है।

(अनुभवी जावा डेवलपर्स कह सकते हैं "बेशक, आप वास्तव में एक स्ट्रिंग को संशोधित नहीं कर सकते हैं", लेकिन इस सवाल के लिए लक्षित दर्शकों को यह नहीं पता हो सकता है।)


इसका मतलब यह है कि हम उदाहरण के लिए लिखकर मूल स्ट्रिंग को अधिलेखित कर सकते हैं: एस = एस। क्रेपल ("\\ s", ""); जब पहली जगह की जाएगी और तब S को S का
फ्रस्ट्रेटेड

@frogeyedpeas जो चर को अधिलेखित करता है Sलेकिन यह उस स्ट्रिंग को अधिलेखित नहीं करता है जो Sइंगित करता है।
मोनिका

मेरा दिन बचाया! ;)
पारस जैन


45

स्ट्रिंग हेरफेर को संभालने का एक तरीका अपाचे कॉमन्स से स्ट्रिंगरूटिल्स है।

String withoutWhitespace = StringUtils.deleteWhitespace(whitespaces);

आप इसे यहाँ पा सकते हैं । कॉमन्स-लैंग में बहुत अधिक शामिल हैं और अच्छी तरह से समर्थित है।


यह अधिक पठनीय होने का लाभ है।
payne

36

यदि आपको अटूट स्थान भी निकालने की आवश्यकता है, तो आप अपने कोड को इस तरह अपग्रेड कर सकते हैं:

st.replaceAll("[\\s|\\u00A0]+", "");

इसके लिए विफल रहता है: " ab c "
मोहम्मद फरीद

1
@MohdFarid ने एक सुधार लागू किया, अब ठीक होना है।
डेनिस कुलगिन

मुझे लगता है कि यह st.replaceAll ("[\\ s | \ u00A0] +", "") होना चाहिए;
परमपुक

30

यदि आप रेगेक्स के लिए यूटीलिटी क्लासेस पसंद करते हैं, तो स्प्रिंग फ्रेमवर्क में स्ट्रिंगयूइटिल्स में एक विधि ट्राइअलहाइट्सस्पेस (स्ट्रिंग) है।


13
वैकल्पिक विचारों का स्वागत है। वे कुछ लोगों की मदद करेंगे, भले ही हर कोई नहीं।
james.garriss

25

आपको पहले से ही गुरसेल कोका से सही जवाब मिला है, लेकिन मेरा मानना ​​है कि एक अच्छा मौका है कि यह वह नहीं है जो आप वास्तव में करना चाहते हैं। इसके बजाय कुंजी-मूल्यों को पार्स करने के बारे में कैसे?

import java.util.Enumeration;
import java.util.Hashtable;

class SplitIt {
  public static void main(String args[])  {

    String person = "name=john age=13 year=2001";

    for (String p : person.split("\\s")) {
      String[] keyValue = p.split("=");
      System.out.println(keyValue[0] + " = " + keyValue[1]);
    }
  }
}

आउटपुट:
नाम = जॉन
आयु = 13
वर्ष = 2001


22

आपको उपयोग करना चाहिए

s.replaceAll("\\s+", "");

के बजाय:

s.replaceAll("\\s", "");

इस तरह, यह प्रत्येक स्ट्रिंग के बीच एक से अधिक रिक्त स्थान के साथ काम करेगा। उपरोक्त रेगेक्स में + साइन का अर्थ "एक या अधिक \" है


2
मैंने इसे जांचने के लिए एक त्वरित उदाहरण टाइप किया क्योंकि यह मेरे लिए अजीब लग रहा था और पाया कि अतिरिक्त प्लस चिह्न की आवश्यकता नहीं है। शब्दों को अलग करने वाले कई स्थानों की खपत होती है। इसका कारण सबसे अधिक संभावना है कि replaceAllदोहराता है जब तक कि पैटर्न स्ट्रिंग के किसी भी हिस्से से मेल नहीं खाता।
नारायण

2
वास्तव में। +, यह मामूली अधिक CPU के अनुकूल बनाने सकता है क्योंकि लगातार खाली स्थान के लिए एक एकल में नियंत्रित किया जाता है ऑपरेशन की जगह है, लेकिन वह इस मामले में यही एक अंतर है। यह वास्तव में है All, न +कि स्ट्रिंग में गैर-लगातार व्हाट्सएप की जगह।
नाइट्रो 2k01

यह इसे (u00A0) नहीं हटाता है
FIRAT

8

ऐसा करने का सबसे आसान तरीका पुस्तकालय के org.apache.commons.lang3.StringUtilsवर्ग का उपयोग करके है commons-lang3जैसे "commons-lang3-3.1.jar " उदाहरण के लिए।

StringUtils.deleteWhitespace(String str)अपने इनपुट स्ट्रिंग पर स्टैटिक विधि का प्रयोग करें " " और इसमें से सभी सफेद रिक्त स्थान को हटाने के बाद यह आपको एक स्ट्रिंग लौटाएगा मैंने आपके उदाहरण स्ट्रिंग की कोशिश की " name=john age=13 year=2001" और इसने मुझे वही स्ट्रिंग लौटा दी जो आप चाहते थे - " name=johnage=13year=2001"। उम्मीद है की यह मदद करेगा।


7

आप इसे बस द्वारा कर सकते हैं

String newMysz = mysz.replace(" ","");

आश्चर्यजनक रूप से, मेरी स्थिति में एकमात्र कार्यकर्ता। धन्यवाद।
वेलेरी

6
public static void main(String[] args) {        
    String s = "name=john age=13 year=2001";
    String t = s.replaceAll(" ", "");
    System.out.println("s: " + s + ", t: " + t);
}

Output:
s: name=john age=13 year=2001, t: name=johnage=13year=2001

4
String a="string with                multi spaces ";
//or this 
String b= a.replaceAll("\\s+"," ");
String c= a.replace("    "," ").replace("   "," ").replace("  "," ").replace("   "," ").replace("  "," ");

// यह किसी भी रिक्त स्थान के साथ ठीक काम करता है * स्टिंग बी में स्थान न भूलें


बहुत उपयोगी है, लेकिन पोस्ट किए गए प्रश्न का उत्तर नहीं देता है!
बुविन जेएन


3

जावा में हम निम्नलिखित ऑपरेशन कर सकते हैं:

String pattern="[\\s]";
String replace="";
part="name=john age=13 year=2001";
Pattern p=Pattern.compile(pattern);
Matcher m=p.matcher(part);
part=m.replaceAll(replace);
System.out.println(part);

इसके लिए आपको निम्नलिखित पैकेजों को अपने कार्यक्रम में आयात करना होगा:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

मुझे आशा है कि यह आपकी मदद करेगा।


आपके द्वारा अपना जवाब पोस्ट करने से पहले यह जानकारी अन्य लोगों द्वारा प्रदान की गई है।
जां ग्रथ

3

पैटर्न और माचिस का उपयोग करना अधिक गतिशील है।

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RemovingSpace {

    /**
     * @param args
     * Removing Space Using Matcher
     */
    public static void main(String[] args) {
        String str= "jld fdkjg jfdg ";
        String pattern="[\\s]";
        String replace="";

        Pattern p= Pattern.compile(pattern);
        Matcher m=p.matcher(str);

        str=m.replaceAll(replace);
        System.out.println(str);    
    }
}


3

NullPointerException से बचने के लिए Apache string यूज़ क्लास बेहतर है

org.apache.commons.lang3.StringUtils.replace("abc def ", " ", "")

उत्पादन

abcdef


2
mysz = mysz.replace(" ","");

अंतरिक्ष के साथ पहला, अंतरिक्ष के बिना दूसरा।

फिर किया जाता है।


7
बस स्पष्ट करने के लिए, व्हाट्सएप का मतलब है [ \t\n\x0B\f\r]। आप केवल सामान्य [ ]रिक्त स्थान कर रहे हैं ।
GKFX

2
import java.util.*;
public class RemoveSpace {
    public static void main(String[] args) {
        String mysz = "name=john age=13 year=2001";
        Scanner scan = new Scanner(mysz);

        String result = "";
        while(scan.hasNext()) {
            result += scan.next();
        }
        System.out.println(result);
    }
}

1

इस समस्या को हल करने के कई तरीके हैं। आप विभाजन फ़ंक्शन का उपयोग कर सकते हैं या स्ट्रिंग्स के फ़ंक्शन को बदल सकते हैं।

अधिक जानकारी के लिए स्मिलियार समस्या देखें http://techno-terminal.blogspot.in/2015/10/how-to-remove-spaces-from-given-string.html


1

अपने उदाहरण में रिक्तियाँ निकालने के लिए, यह करने का एक और तरीका है:

String mysz = "name=john age=13 year=2001";
String[] test = mysz.split(" ");
mysz = String.join("", mysz);

यह क्या करता है यह रिक्त स्थानों को विभाजकों के साथ एक सरणी में परिवर्तित करता है, और फिर यह रिक्त स्थान के बिना एक साथ सरणी में आइटम को जोड़ता है।

यह बहुत अच्छी तरह से काम करता है और समझने में आसान है।


2
लेकिन एक बहुत ही अकुशल समाधान। और, जैसा कि आप अन्य समाधानों से देख सकते हैं - यह केवल "" स्थान के लिए काम करता है - और विभिन्न प्रकार के व्हाट्सएप के लिए नहीं।
घोस्टकट

1

वहाँ दूसरों अंतरिक्ष चार भी तार में मौजूद हैं .. तो अंतरिक्ष चार हम तार से बदलने की आवश्यकता हो सकती है।

Ex: NO-BREAK SPACE, THREE-PER-EM SPACE, PUNCTUATION SPACE

यहाँ स्पेस चार http://jkorpela.fi/chars/spaces.html की सूची दी गई है

इसलिए हमें संशोधित करने की आवश्यकता है

\ u2004 हमें तीन-प्रति-ईएम स्पेस के लिए

s.replaceAll ( "[\ u0020 \ u2004]", "")


0

व्हाइट स्पेस कैरेक्टर क्लास से व्हाट्सएप फंक्शन का इस्तेमाल करके हटा सकता है।

public static void main(String[] args) {
    String withSpace = "Remove white space from line";
    StringBuilder removeSpace = new StringBuilder();

    for (int i = 0; i<withSpace.length();i++){
        if(!Character.isWhitespace(withSpace.charAt(i))){
            removeSpace=removeSpace.append(withSpace.charAt(i));
        }
    }
    System.out.println(removeSpace);
}

0

पाठ के प्रत्येक समूह को अपने स्वयं के स्थानापन्न में अलग करें और फिर उन सबस्ट्रेट्स को संक्षिप्त करें:

public Address(String street, String city, String state, String zip ) {
    this.street = street;
    this.city = city;
    // Now checking to make sure that state has no spaces...
    int position = state.indexOf(" ");
    if(position >=0) {
        //now putting state back together if it has spaces...
        state = state.substring(0, position) + state.substring(position + 1);  
    }
}

0
public static String removeWhiteSpaces(String str){
    String s = "";
    char[] arr = str.toCharArray();
    for (int i = 0; i < arr.length; i++) {
        int temp = arr[i];
        if(temp != 32 && temp != 9) { // 32 ASCII for space and 9 is for Tab
            s += arr[i];
        }
    }
    return s;
}

यह मदद कर सकता है।


0

आप नीचे दिए गए जावा कोड पर भी नज़र डाल सकते हैं। निम्नलिखित कोड किसी भी "अंतर्निहित" विधियों का उपयोग नहीं करते हैं।

/**
 * Remove all characters from an alphanumeric string.
 */
public class RemoveCharFromAlphanumerics {

    public static void main(String[] args) {

        String inp = "01239Debashish123Pattn456aik";

        char[] out = inp.toCharArray();

        int totint=0;

        for (int i = 0; i < out.length; i++) {
            System.out.println(out[i] + " : " + (int) out[i]);
            if ((int) out[i] >= 65 && (int) out[i] <= 122) {
                out[i] = ' ';
            }
            else {
                totint+=1;
            }

        }

        System.out.println(String.valueOf(out));
        System.out.println(String.valueOf("Length: "+ out.length));

        for (int c=0; c<out.length; c++){

            System.out.println(out[c] + " : " + (int) out[c]);

            if ( (int) out[c] == 32) {
                System.out.println("Its Blank");
                 out[c] = '\'';
            }

        }

        System.out.println(String.valueOf(out));

        System.out.println("**********");
        System.out.println("**********");
        char[] whitespace = new char[totint];
        int t=0;
        for (int d=0; d< out.length; d++) {

            int fst =32;



            if ((int) out[d] >= 48 && (int) out[d] <=57 ) {

                System.out.println(out[d]);
                whitespace[t]= out[d];
                t+=1;

            }

        }

        System.out.println("**********");
        System.out.println("**********");

        System.out.println("The String is: " + String.valueOf(whitespace));

    }
}

इनपुट:

String inp = "01239Debashish123Pattn456aik";

आउटपुट:

The String is: 01239123456


0

बहुत सारे जवाब दिए गए हैं। मैं एक समाधान देना चाहूंगा जो रेगेक्स की तुलना में काफी पठनीय और बेहतर हो।

import java.io.IOException;

import org.apache.commons.lang.StringUtils;

public class RemoveAllWhitespaceTest {

    public static void main(String[] args) throws IOException {

        String str1 = "\n\tThis is my string \n \r\n  !";

        System.out.println("[" + str1 + "]");

        System.out.println("Whitespace Removed:");

        System.out.println("[" + StringUtils.deleteWhitespace(str1) + "]");

        System.out.println();

    }

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