Menghapus spasi putih dari string di Jawa

684

Saya memiliki string seperti ini:

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

Saya ingin menghapus spasi putih di string. Saya mencoba trim()tetapi ini hanya menghapus spasi putih sebelum dan sesudah seluruh string. Saya juga mencoba replaceAll("\\W", "")tetapi kemudian =juga akan dihapus.

Bagaimana saya bisa mencapai string dengan:

mysz2 = "name=johnage=13year=2001"
zyamat
sumber
1
\\Wberarti semua yang bukan kata-kata dapat melihat download.oracle.com/javase/6/docs/api/java/util/regex/…
Nishant
75
Apa rencanamu dengan string "name = johnage = 13year = 2001"? Saya harap tidak mengurai itu.
Jonas Elfström
4
@ JonasElfström Saya membayangkan itu untuk membantu dengan perbandingan string
Isaac
bagaimana jika string sebenarnya = "". Apakah semua yang trims () tidak membersihkan string kosong seperti yang saya sebutkan? @zyamat?
gumuruh
Kemungkinan duplikat dari Bagaimana menghapus spasi di string java
KIBOU Hassan

Jawaban:

1287

st.replaceAll("\\s+","")menghapus semua spasi putih dan karakter yang tidak terlihat (misalnya, tab, \n).


st.replaceAll("\\s+","")dan st.replaceAll("\\s","")menghasilkan hasil yang sama.

Regex kedua adalah 20% lebih cepat dari yang pertama, tetapi karena jumlah ruang berturut-turut meningkat, yang pertama berkinerja lebih baik daripada yang kedua.


Tetapkan nilai ke variabel, jika tidak digunakan secara langsung:

st = st.replaceAll("\\s+","")
Gursel Koca
sumber
34
Saya ingin mencatat bahwa kedua regex ini akan menghasilkan hasil yang berbeda jika Anda ingin mengganti semua spasi putih dengan satu ruang (atau beberapa set karakter lain). Jika Anda memiliki spasi berturut-turut, menggunakan \\ s itu akan mengganti setiap karakter spasi dengan karakter yang diberikan diberikan. Diberikan \\ s + itu akan mengganti setiap set spasi putih dengan string pengganti tunggal. Saya bisa melihat beberapa kasus di mana orang mungkin datang ke posting ini untuk mengganti spasi dengan sesuatu yang bukan hanya string kosong, dan ini mungkin membantu.
Caitlin
2
tetapi itu tidak menghapus ruang putih jika itu di awal string.
kesepian
@saya gunakan .trim () untuk itu
CQM
6
Cukup gunakan StringUtils dari apache-commons. Ini adalah metode statis yang disebut StringUtils.deleteWhitespace.
Crozeta
@Gursel terima kasih atas jawaban dan perbandingan kinerja untuk dua regex. Saya bertanya-tanya mengapa ada perbedaan kinerja antara keduanya? Apakah ada sesuatu yang saya lewatkan, bisa tolong tunjukkan referensi yang berbicara lebih lanjut tentang perbedaan kinerja.
Vishrant
247
replaceAll("\\s","")

\w = Apa pun yang merupakan karakter kata

\W = Apa pun yang bukan karakter kata (termasuk tanda baca, dll.)

\s = Apa pun yang merupakan karakter spasi (termasuk spasi, karakter tab, dll.)

\S = Apa pun yang bukan karakter spasi (termasuk huruf dan angka, serta tanda baca dll)

(Sunting: Seperti yang ditunjukkan, Anda harus menghindari backslash jika Anda ingin \smencapai mesin regex, menghasilkan \\s.)

nitro2k01
sumber
103

Jawaban paling benar untuk pertanyaan ini adalah:

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

Saya baru saja mengadaptasi kode ini dari jawaban lain. Saya mempostingnya karena selain persis apa yang diminta pertanyaan, itu juga menunjukkan bahwa hasilnya dikembalikan sebagai string baru, string asli tidak dimodifikasi karena beberapa jawaban menyiratkan semacam itu.

(Pengembang Java yang berpengalaman mungkin mengatakan "tentu saja, Anda tidak dapat benar-benar memodifikasi sebuah String", tetapi audiens target untuk pertanyaan ini mungkin tidak mengetahui hal ini.)

Fletch
sumber
Apakah ini berarti kita dapat menimpa string asli dengan menulis misalnya: S = S.replaceAll ("\\ s", ""); sedangkan pertama penggantian akan dilakukan dan kemudian S akan menerima versi characterstripped dari S
frogeyedpeas
@ frogeyedpeas Itu menimpa variabel Stetapi tidak menimpa string yang Smenunjuk.
Pasang kembali Monica
Selamatkan hari saya! ;)
Paras Jain
62

Bagaimana replaceAll("\\s", ""). Rujuk ke sini .

Erkan Haspulat
sumber
49
Betapa bedanya menjadi terlambat satu menit!
HDave
45

Salah satu cara untuk menangani manipulasi String adalah StringUtils dari Apache commons.

String withoutWhitespace = StringUtils.deleteWhitespace(whitespaces);

Anda dapat menemukannya di sini . commons-lang menyertakan lebih banyak dan didukung dengan baik.

jahir
sumber
Ini memiliki keuntungan karena lebih mudah dibaca.
bayar
36

Jika Anda perlu menghapus ruang yang tidak bisa dipecahkan juga, Anda dapat meningkatkan kode Anda seperti ini:

st.replaceAll("[\\s|\\u00A0]+", "");
v.nivuahc
sumber
Ini gagal untuk: " ab c "
Mohd Farid
1
@MohdFarid Menerapkan perbaikan, harus ok sekarang.
Denis Kulagin
Saya pikir itu harus st.replaceAll ("[\\ s | \ u00A0] +", "");
paramupk
30

Jika Anda lebih suka kelas utilitas daripada regex, ada metode trimAllWhitespace (String) di StringUtils di Spring Framework.

kamczak
sumber
13
Gagasan alternatif dipersilakan. Mereka akan membantu beberapa orang, bahkan jika tidak semua orang.
james.garriss
25

Anda sudah mendapatkan jawaban yang benar dari Gursel Koca, tetapi saya percaya bahwa ada peluang bagus bahwa ini bukan yang benar-benar ingin Anda lakukan. Bagaimana kalau parsing nilai-nilai kunci saja?

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]);
    }
  }
}

output:
name = john
age = 13
tahun = 2001

Jonas Elfström
sumber
22

Kamu harus menggunakan

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

dari pada:

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

Dengan cara ini, ini akan bekerja dengan lebih dari satu spasi di antara setiap string. Tanda + pada regex di atas berarti "satu atau lebih"

Varejones
sumber
2
Saya mengetikkan contoh cepat untuk memeriksa ini karena itu terdengar aneh bagi saya dan menemukan bahwa tanda tambah yang ditambahkan tidak diperlukan. Banyak spasi yang memisahkan kata-kata dikonsumsi. Alasan untuk ini kemungkinan besar adalah replaceAllpengulangan sampai pola tidak cocok dengan bagian mana pun dari string.
nyaray
2
Memang. The +mungkin membuatnya sedikit lebih CPU ramah, karena spasi berturut-turut ditangani dalam satu menggantikan operasi, tapi itu satu-satunya perbedaan dalam hal ini. Memang itu All, bukan +yang menggantikan spasi putih non-berturut-turut dalam string.
nitro2k01
itu tidak menghapus ini (u00A0)
Kerim FIRAT
8

Cara termudah untuk melakukan ini adalah dengan menggunakan org.apache.commons.lang3.StringUtilskelas commons-lang3perpustakaan seperti " commons-lang3-3.1.jar" misalnya.

Gunakan metode statis " StringUtils.deleteWhitespace(String str)" pada string input Anda & itu akan mengembalikan Anda string setelah menghapus semua spasi putih dari itu. Saya mencoba contoh string Anda " name=john age=13 year=2001" & mengembalikan saya string yang tepat yang Anda inginkan - " name=johnage=13year=2001". Semoga ini membantu.

Ayaskant
sumber
7

Anda dapat melakukannya hanya dengan

String newMysz = mysz.replace(" ","");
Vinod Ranga
sumber
Hebatnya, satu-satunya pekerja dalam situasi saya. Terima kasih.
Valeriy
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
avngr
sumber
4
String a="string with                multi spaces ";
//or this 
String b= a.replaceAll("\\s+"," ");
String c= a.replace("    "," ").replace("   "," ").replace("  "," ").replace("   "," ").replace("  "," ");

// itu bekerja dengan baik dengan spasi apa pun * jangan lupa ruang dalam sengatan b

fatsoft
sumber
Sangat berguna, tetapi tidak menjawab pertanyaan yang diposting!
BuvinJ
3

\Wberarti "karakter bukan kata". Pola untuk karakter spasi adalah \s. Ini didokumentasikan dengan baik di Pattern javadoc .

JB Nizet
sumber
8
Di mana sisa jawaban ini?
LS
3

Di java kita bisa melakukan operasi berikut:

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

untuk ini, Anda perlu mengimpor paket berikut ke program Anda:

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

Saya harap ini akan membantu Anda.

pengguna27
sumber
Informasi ini telah disediakan oleh orang lain bertahun-tahun sebelum Anda memposting jawaban Anda.
jan groth
3

Menggunakan Pattern And Matcher lebih dinamis.

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);    
    }
}
jayesh
sumber
3

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

Mohammad Raza
sumber
ada jawaban seperti / sama dengan saran Anda, di atas
omerhakanbilici
3

Gunakan apache string util class lebih baik untuk menghindari NullPointerException

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

Keluaran

abcdef
sendon1982
sumber
3

Saat menggunakan st.replaceAll("\\s+","")di Kotlin , pastikan Anda membungkus "\\s+"dengan Regex :

"myString".replace(Regex("\\s+"), "")
Jemshit Iskenderov
sumber
2
mysz = mysz.replace(" ","");

Pertama dengan ruang, kedua tanpa ruang.

Kemudian selesai.

pengguna2357526
sumber
7
Hanya untuk memperjelas, ruang putih berarti [ \t\n\x0B\f\r]. Anda hanya melakukan [ ]ruang normal .
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);
    }
}
Tony Nguyen
sumber
1

Untuk menghapus spasi dalam contoh Anda, ini adalah cara lain untuk melakukannya:

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

Apa yang dilakukan adalah mengubahnya menjadi array dengan spasi sebagai pemisah, dan kemudian menggabungkan item dalam array bersama-sama tanpa spasi.

Ini bekerja dengan cukup baik dan mudah dimengerti.

Megawatt
sumber
2
Tetapi solusi yang sangat tidak efisien. Dan, seperti yang Anda lihat dari solusi lain - ini hanya berfungsi untuk "" ruang - dan bukan untuk berbagai jenis ruang putih.
GhostCat
1

Ada yang lain spasi char juga ada di string .. Jadi space char kita mungkin perlu mengganti dari string.

Mis: RUANG NO-BREAK, RUANG TIGA-PER-EM, RUANG PUNCTUATION

Berikut adalah daftar char space http://jkorpela.fi/chars/spaces.html

Jadi kita perlu memodifikasi

\ u2004 kami untuk TIGA PER PER EMISI

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

Rakesh Chaudhari
sumber
0

Ruang putih dapat menghapus menggunakan fungsi isWhitespace dari Kelas Karakter.

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);
}
Abdur Rahman
sumber
0

Pisahkan setiap grup teks ke dalam substringnya sendiri dan kemudian gabungkan substring tersebut:

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);  
    }
}
pengguna9832813
sumber
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;
}

Ini mungkin bisa membantu.

Rajesh Gurbani
sumber
0

Anda juga dapat melihat kode Java di bawah ini. Kode berikut tidak menggunakan metode "bawaan" apa pun.

/**
 * 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));

    }
}

Memasukkan:

String inp = "01239Debashish123Pattn456aik";

Keluaran:

The String is: 01239123456
Deb
sumber
0
private String generateAttachName(String fileName, String searchOn, String char1) {
    return fileName.replaceAll(searchOn, char1);
}


String fileName= generateAttachName("Hello My Mom","\\s","");
Abd Abughazaleh
sumber
0

Cukup banyak jawaban yang diberikan. Saya ingin memberikan solusi yang cukup mudah dibaca dan lebih baik daripada regex.

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

    }

}
Kunal Vohra
sumber