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"

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

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+","")

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


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


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


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.


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]+", "");

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


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


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"


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.


7

Anda dapat melakukannya hanya dengan

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

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

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


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 .


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.


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


3

Gunakan apache string util class lebih baik untuk menghindari NullPointerException

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

Keluaran

abcdef

3

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

"myString".replace(Regex("\\s+"), "")

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

Pertama dengan ruang, kedua tanpa ruang.

Kemudian selesai.


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


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.


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]", "")


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

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

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.


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

0
private String generateAttachName(String fileName, String searchOn, String char1) {
    return fileName.replaceAll(searchOn, char1);
}


String fileName= generateAttachName("Hello My Mom","\\s","");

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

    }

}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.