জাভাতে স্ট্রিংগুলি থেকে সাদা স্থান সরিয়ে নেওয়া হচ্ছে


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
"নাম = জনহাঁস = 13 বছর = 2001" স্ট্রিং নিয়ে আপনার পরিকল্পনা কী? আমি এটি আশা করি পার্স না।
জোনাস এলফস্ট্রোম

4
@ জোনাসএলফস্ট্রোম আমি স্ট্রিং তুলনাগুলির সাথে এটির সাহায্য করার জন্য কল্পনা করি
আইজাক

স্ট্রিংটি আসলে = "" হলে কীভাবে হয়। ট্রিমস () যা কিছু করে তা খালি স্ট্রিং সাফ করে দিচ্ছে যেমনটি আমি উল্লেখ করেছি? @ জ্যাযামাত?
gumuruh

উত্তর:


1289

st.replaceAll("\\s+","")সমস্ত সাদা স্থান এবং অ-দৃশ্যমান অক্ষর (যেমন, ট্যাব, \n) সরিয়ে দেয়।


st.replaceAll("\\s+","") এবং st.replaceAll("\\s","") একই ফলাফল উত্পাদন।

দ্বিতীয় রেজেক্স প্রথমটির চেয়ে 20% দ্রুত, তবে ক্রমাগত সংখ্যা বাড়ার সাথে সাথে প্রথমটি দ্বিতীয়টির চেয়ে ভাল সম্পাদন করে।


কোনও ভেরিয়েবলের মান নির্ধারণ করুন, যদি সরাসরি ব্যবহার না করা হয়:

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

34
আমি লক্ষ করতে চাই যে আপনি যদি কোনও একক স্পেস (বা কোনও অক্ষরের কিছু সেট) দিয়ে সমস্ত শ্বেত স্পেস প্রতিস্থাপন করতে চান তবে এই দুটি রেজেক্স বিভিন্ন ফলাফল আনবে। আপনার যদি ক্রমাগত স্পেস থাকে তবে using গুলি ব্যবহার করে এটি প্রতিটি হোয়াইটস্পেসের অক্ষর প্রদত্ত প্রদত্ত অক্ষরের সাথে প্রতিস্থাপন করবে। দেওয়া \\ গুলি + এটি একক প্রতিস্থাপনের স্ট্রিংয়ের সাথে প্রতিটি হোয়াইটস্পেসের সেটকে প্রতিস্থাপন করবে। আমি বেশ কয়েকটি কেস দেখতে পাচ্ছি যেখানে লোকেরা এই পোস্টে হোয়াইটস্পেস প্রতিস্থাপনের জন্য এমন কিছু উপস্থিত হতে পারে যা কেবল একটি খালি স্ট্রিং নয় এবং এটি সহায়ক হতে পারে।
ক্যাটলিন

2
তবে এটি স্ট্রিংয়ের শুরুতে থাকলে সাদা-স্থান সরিয়ে দেয় না।
নিঃসঙ্গ

@lonesome .trim () যে জন্য ব্যবহার
CQM

6
অ্যাপাচি-কমন্স থেকে কেবল স্ট্রিংগটিলগুলি ব্যবহার করুন। এটি স্ট্রিংউটিলস.ডিলেটহাইটস্পেস নামে একটি স্ট্যাটিক পদ্ধতি।
ক্রুজটা

উত্তর দুটি রেজিএক্সের জন্য উত্তর এবং পারফরম্যান্স তুলনার জন্য @ গ্রুরসেল ধন্যবাদ। আমি ভাবছিলাম কেন দুজনের মধ্যে পারফরম্যান্সের পার্থক্য রয়েছে? আমি কি অনুপস্থিত কিছু আছে, আপনি কি দয়া করে আমাকে এমন কোনও উল্লেখ উল্লেখ করতে পারেন যা সেখানে পারফরম্যান্সের পার্থক্যের বিষয়ে আরও কথা বলে।
বিশ্রান্ত

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

\w = যে কোনও কিছু যা শব্দের চরিত্র

\W = এমন কিছু যা শব্দের অক্ষর নয় (বিরামচিহ্ন ইত্যাদি সহ)

\s = কোনও স্থান যা স্থানের অক্ষর (স্থান, ট্যাব অক্ষর ইত্যাদি সহ)

\S = এমন কোনও কিছু যা কোনও স্থানের অক্ষর নয় (অক্ষর এবং সংখ্যা উভয়ই পাশাপাশি বিরামচিহ্ন ইত্যাদি সহ)

(সম্পাদনা: যেমনটি উল্লেখ করা হয়েছে, আপনি যদি \sরেজেক্স ইঞ্জিনে পৌঁছাতে চান তবে আপনাকে ব্যাকস্ল্যাশ থেকে বাঁচতে হবে , ফলস্বরূপ \\s।)


103

প্রশ্নের সর্বাধিক সঠিক উত্তর হ'ল:

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

আমি এই উত্তরটি অন্য উত্তরগুলি থেকে সবেমাত্র গ্রহণ করেছি। আমি এটি পোস্ট করছি কারণ প্রশ্নের অনুরোধটি ঠিক কীটি করা ছাড়াও এটি এটিও দেখায় যে ফলাফলটি নতুন স্ট্রিং হিসাবে ফিরে এসেছে, মূল স্ট্রিংটি উত্তরগুলি সাজানোর মতো কিছু হিসাবে পরিবর্তিত হয়নি

(অভিজ্ঞ জাভা বিকাশকারীরা অবশ্যই বলতে পারেন "অবশ্যই আপনি আসলে একটি স্ট্রিং সংশোধন করতে পারবেন না", তবে এই প্রশ্নের লক্ষ্যবস্তু শ্রোতারা এটি ভাল জানেন না))


এর অর্থ কি আমরা উদাহরণস্বরূপ লিখে স্ট্রিংটি ওভাররাইট করতে পারি: এস = এসরেপলএল ("\\ s", ""); তবে প্রথমে প্রতিস্থাপনটি করা হবে এবং তারপরে এস এস
ফ্রিজিপেডিয়াস

@ ফ্রজেইডিপিয়াস যা ভেরিয়েবলকে ওভাররাইট করে Sতবে এটি সেই পংক্তিকে ওভাররাইট করে না যা Sনির্দেশ করে।
মনিকা

আমার দিন বাঁচা! ;)
পারস জৈন


45

স্ট্রিং ম্যানিপুলেশনগুলি হ্যান্ডেল করার একটি উপায় হ'ল অ্যাপাচি কমন্স থেকে স্ট্রিংআপিলস।

String withoutWhitespace = StringUtils.deleteWhitespace(whitespaces);

আপনি এটি এখানে খুঁজে পেতে পারেন । কমন্স-ল্যাং-এ আরও অনেকগুলি রয়েছে এবং এটি সমর্থিত well


এটি আরও পঠনযোগ্য হওয়ার সুবিধা রয়েছে।
Payne

36

আপনার যদি অবিচ্ছেদ্য জায়গাগুলিও সরিয়ে ফেলতে হয় তবে আপনি নিজের কোডটি আপগ্রেড করতে পারেন:

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

এটি এর জন্য ব্যর্থ হয়: " ab c "
মোহাম্মদ ফরিদ

1
@ মোহডফারিড একটি স্থির প্রয়োগ করেছেন, এখনই ঠিক আছে।
ডেনিস কুলাগিন

আমি মনে করি এটি 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নয়, +এটি স্ট্রিংয়ের মধ্যে অবিচ্ছিন্ন সাদা স্থানকে প্রতিস্থাপন করছে।
nitro2k01

এটি এটি (u00A0) মুছে দেয় না
কেরিম FIRAT

8

এটি করার সবচেয়ে সহজ উপায় উদাহরণস্বরূপ লাইব্রেরির org.apache.commons.lang3.StringUtilsক্লাস ব্যবহার করে ।commons-lang3commons-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

নালপয়েন্টারএক্সসেপশন এড়ানোর জন্য অ্যাপাচি স্ট্রিং ব্যবহারের ক্লাস ব্যবহার করা ভাল

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

এই সমস্যাটি সমাধান করার অনেক উপায় রয়েছে। আপনি বিভক্ত ফাংশন ব্যবহার করতে পারেন বা স্ট্রিংগুলির ফাংশন প্রতিস্থাপন করতে পারেন।

আরও তথ্যের জন্য smilliar সমস্যা পড়ুন 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

স্ট্রিংগুলিতে অন্যদের স্পেস চরের উপস্থিতি রয়েছে .. তাই স্পেস চরটি আমাদের স্ট্রিং থেকে প্রতিস্থাপনের প্রয়োজন হতে পারে।

উদাহরণস্বরূপ: কোনও- BREAK স্পেস, তিন-পার-ইম স্পেস, সময়সীমা স্থান

এখানে স্থানের তালিকা http://jkorpela.fi/chars/spaces.html এর তালিকা

সুতরাং আমাদের পরিবর্তন করতে হবে

P u2004 আমাদের তিনটি পার-ইম স্পেসের জন্য

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


0

হোয়াইট স্পেস ক্যারেক্টার ক্লাস থেকে isWhitespace ফাংশন ব্যবহার করে মুছে ফেলতে পারে।

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

    }

}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.