Javaの文字列から空白を削除する


684

私はこのような文字列を持っています:

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

文字列の空白を削除したいのですが。私は試しましたtrim()が、これは文字列全体の前後の空白のみを削除します。私も試しましたreplaceAll("\\W", "")が、その後=も削除されます。

どのようにして文字列を実現できますか?

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


75
「name = johnage = 13year = 2001」という文字列を使用した計画は何ですか?解析しないことを望みます。
JonasElfström

4
@JonasElfström文字列の比較に役立つと思います
Isaac

文字列が実際に= ""である場合はどうでしょうか。私が言ったように、trims()が行うことはすべて空の文字列をクリアすることですか?@zyamat?
gumuruh

回答:


1287

st.replaceAll("\\s+","")すべての空白と見えない文字(例えば、タブ、\n)を削除します。


st.replaceAll("\\s+","")そして、st.replaceAll("\\s","")同じ結果を生成します。

2番目の正規表現は最初の正規表現よりも20%高速ですが、連続するスペースの数が増えるにつれて、最初の正規表現は2番目の正規表現よりもパフォーマンスが向上します。


直接使用しない場合は、値を変数に割り当てます。

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

34
すべての空白を1つのスペース(またはその他の文字セット)で置き換える場合、これら2つの正規表現は異なる結果を生成することに注意してください。連続するスペースがある場合、\\ sを使用すると、各空白文字が指定された文字に置き換えられます。\\ s +を指定すると、空白の各セットを単一の置換文字列に置き換えます。空白を単なる空の文字列ではないものに置き換えるために人々がこの投稿にアクセスするかなりのケースを見ることができ、これは役立つかもしれません。
ケイトリン

2
ただし、文字列の先頭にある空白は削除されません。
16:12の寂しい

@lonesomeは.trim()を使用します
CQM

6
apache-commonsのStringUtilsを使用するだけです。StringUtils.deleteWhitespaceと呼ばれる静的メソッド。
Crozeta 2017年

@Gurselの回答と2つの正規表現のパフォーマンス比較に感謝します。なぜ2つの間にパフォーマンスの違いがあるのか​​と思っていましたか?不足しているものはありますか?パフォーマンスの違いについて詳しく説明しているリファレンスを教えてください。
ビシュラント2018

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

\w =単語文字であるすべてのもの

\W =単語文字ではないもの(句読点など)

\s =スペース文字であるもの(スペース、タブ文字などを含む)

\S =スペース文字以外のもの(文字と数字の両方、および句読点など)

(編集:指摘した\sように、正規表現エンジンに到達したい場合は、バックスラッシュをエスケープする必要があります\\s。その結果、になります。)


103

質問に対する最も正しい答えは次のとおりです。

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

私は他の答えからこのコードを適応させました。私がそれを投稿しているのは、質問が要求したものとまったく同じであるだけでなく、結果が新しい文字列として返され、元の文字列が一部の回答が示唆するように変更されていないことも示しているためです

(経験豊富なJava開発者は「もちろん、実際には文字列を変更することはできません」と言うかもしれませんが、この質問の対象読者はこれをよく知らないかもしれません。)


これは、たとえば次のように書いて元の文字列を上書きできることを意味しますか?S = S.replaceAll( "\\ s"、 ""); 一方、最初に置き換えが行われ、次にSがSのキャラクター
ストリップ

@frogeyedpeasこれは変数を上書きしますSが、指す文字列上書きしませんS
モニカを

私の日を救った!;)
Paras Jain 2017


45

文字列操作を処理する1つの方法は、ApacheコモンズのStringUtilsです。

String withoutWhitespace = StringUtils.deleteWhitespace(whitespaces);

あなたはここでそれを見つけることができます。commons-langにはさらに多くのものが含まれており、十分にサポートされています。


これには、より読みやすくなるという利点があります。
ペイン

36

壊れないスペースも削除する必要がある場合は、次のようにコードをアップグレードできます。

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

これは失敗します: " ab c "
Mohd Farid

1
@MohdFarid修正を適用しましたが、今は大丈夫でなければなりません。
Denis Kulagin 2016年

st.replaceAll( "[\\ s | \ u00A0] +"、 "");と思います。
paramupk 2017


25

あなたはすでにGursel Kocaから正しい答えを得ていますが、これが本当にやりたいことではない可能性は十分にあると思います。代わりにKey-Valueを解析してみませんか?

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

このようにして、各文字列の間に複数のスペースがあっても機能します。上記の正規表現の+記号は、「1つ以上の\ s」を意味します


2
これを確認する簡単な例を打ち込んだのは、奇妙に聞こえたため、プラス記号を追加する必要がないことがわかりました。単語を区切る複数のスペースが消費されます。これはreplaceAll、パターンが文字列のどの部分にも一致しなくなるまで繰り返されることが原因と考えられます。
nyaray 2013

2
確かに。+連続した空白文字を単一の置換操作で扱うが、それはこの場合の唯一の違いですされているので、それがわずかに多くのCPUに優しいことがあります。これは実際にAllであり+、文字列内の連続しない空白を置き換えるものではありません。
nitro2k01 2013年

これは削除されません(u00A0)
Kerim FIRAT

8

これを行う最も簡単な方法は、" " などorg.apache.commons.lang3.StringUtilscommons-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(" ","");

驚いたことに、私の状況で唯一の労働者。ありがとう。
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("  "," ");

//任意のスペースで正常に動作します*文字列bのスペースを忘れないでください


非常に便利ですが、投稿された質問には回答しません!
BuvinJ 2016年


3

Javaでは、次の操作を実行できます。

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;

お役に立てば幸いです。


この情報は、回答を投稿する前に他の人から提供されたものです。
jan groth 2014

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文字列のutilクラスを使用することをお勧めします

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

出力

abcdef


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

最初はスペースあり、2つ目はスペースなし。

その後、それが行われます。


7
明確にするために、空白はを意味し[ \t\n\x0B\f\r]ます。あなたは通常の[ ]スペースだけをやっています。
GKFX 2015

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

あなたの例でスペースを削除するには、これはそれを行う別の方法です:

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

これは、スペースを区切り文字とする配列に変換し、スペースなしで配列内の項目を結合することです。

それはかなりうまく機能し、理解しやすいです。


2
しかし、非常に非効率的なソリューションです。また、他のソリューションからわかるように、これは「」スペースでのみ機能し、さまざまな種類の空白では機能しません。
GhostCat 2017

1

他にもスペース文字が文字列に存在します。したがって、スペース文字を文字列から置き換える必要がある場合があります。

例:NO-BREAK SPACE、THREE-PER-EMスペース、句読点スペース

ここにスペース文字のリストがありますhttp://jkorpela.fi/chars/spaces.html

したがって、変更する必要があります

\ u2004 EMあたり3つのスペース

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

以下のJavaコードもご覧ください。以下のコードは、「組み込み」メソッドを使用していません。

/**
 * 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
private String generateAttachName(String fileName, String searchOn, String char1) {
    return fileName.replaceAll(searchOn, char1);
}


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

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.