web-dev-qa-db-ja.com

Javaはどのように文字列内の単一のスペースで2つ以上のスペースを置き換えて、前後のスペースを削除する

Javaでこの文字列を変更するための迅速で簡単な方法を探してください。

" hello     there   "

こんな感じに

"hello there"

ここで、文字列の先頭にある1つ以上のスペースも削除したい場合を除いて、これらすべての複数スペースを単一のスペースに置き換えます。

このような何かは私を部分的にそこに連れて行きます

String mytext = " hello     there   ";
mytext = mytext.replaceAll("( )+", " ");

しかしそうではありません。

237
Nessa

これを試して:

String after = before.trim().replaceAll(" +", " ");

また見なさい


trim()正規表現なし

1つのreplaceAllでこれを実行することも可能ですが、これはtrim()ソリューションよりもはるかに読みにくいです。それにもかかわらず、ここでは単に正規表現ができることを示すために提供されています。

    String[] tests = {
        "  x  ",          // [x]
        "  1   2   3  ",  // [1 2 3]
        "",               // []
        "   ",            // []
    };
    for (String test : tests) {
        System.out.format("[%s]%n",
            test.replaceAll("^ +| +$|( )+", "$1")
        );
    }

3つの選択肢があります。

  • ^_+:文字列の先頭にあるスペースの連続
    • 空の文字列をキャプチャする$1と照合して置き換えます。
  • _+$:文字列の最後にあるスペースの連続
    • 空の文字列をキャプチャする$1と照合して置き換えます。
  • (_)+:上記のいずれにも一致しないスペースのシーケンス。中央にあることを意味します
    • 1つのスペースを取り込む$1と突き合わせて置き換えます。

また見なさい

405

あなただけが必要です:

replaceAll("\\s{2,}", " ").trim();

1つ以上のスペースを一致させ、それらを1つのスペースに置き換えてから、最初と最後の空白をトリムします(最初にトリミングしてからマッチングすることで反転させることができます)。

これをすぐに試してみるには:

System.out.println(new String(" hello     there   ").trim().replaceAll("\\s{2,}", " "));

そしてそれは戻ります:

"hello there"
134
sarah.ferguson

Apache commonsのStringUtils.normalizeSpace(String str)メソッドを使用してください。 こちらのドキュメント を参照してください。

38
Monica Granbois

これは私にとっては完璧に機能しました:sValue = sValue.trim().replaceAll("\\s+", " ");

15
Doctor

文字列の最初と最後のスペースを削除するには、String#trim()メソッドを使用します。そして、あなたのmytext.replaceAll("( )+", " ")を使ってください。

13
folone

最初にString.trim()を使用してから、結果にregex replaceコマンドを適用することができます。

12
Eyal Schneider
"[ ]{2,}"

これは複数のスペースに一致します。

String mytext = " hello     there   ";
//without trim -> " hello there"
//with trim -> "hello there"
mytext = mytext.trim().replaceAll("[ ]{2,}", " ");
System.out.println(mytext);

出力:

hello there
10
Gitesh Dalal

これを試してください。

サンプルコード

String str = " hello     there   ";
System.out.println(str.replaceAll("( +)"," ").trim());

OUTPUT

hello there

まず、すべてのスペースを単一のスペースに置き換えます。 Stringの始まりとStringの終わりをトリミングStringとするのは、Stringの開始時にスペースが1つのスペースに置き換えられるためです。 Stringの終わりとStringの終わりですので、それらをトリミングする必要があります。あなたが望むよりもStringを得る。

8
Raj S. Rusia

あなたはまたルックアラウンドを使うことができます。

test.replaceAll("^ +| +$|(?<= ) ", "");

または

test.replaceAll("^ +| +$| (?= )", "")

<space>(?= )はスペース文字と一致し、その後に別のスペース文字が続きます。連続したスペースでは、最後のスペースを除いたすべてのスペースと一致します。スペース文字が後に続かないためです。これにより、削除操作後に連続したスペースのための単一のスペースが残ります。

例:

    String[] tests = {
            "  x  ",          // [x]
            "  1   2   3  ",  // [1 2 3]
            "",               // []
            "   ",            // []
        };
        for (String test : tests) {
            System.out.format("[%s]%n",
                test.replaceAll("^ +| +$| (?= )", "")
            );
        }
3
Avinash Raj

トリム()

先頭と末尾のスペースのみを削除します。

"Java Docから、"値がこの文字列で、先頭と末尾の空白が削除された文字列を返します。 "

System.out.println(" D ev  Dum my ".trim());

"D ev Dum my"

replace()、replaceAll()

Word内のすべての空の文字列を置き換えます。

System.out.println(" D ev  Dum my ".replace(" ",""));

System.out.println(" D ev  Dum my ".replaceAll(" ",""));

System.out.println(" D ev  Dum my ".replaceAll("\\s+",""));

出力:

"DevDummy"

"DevDummy"

"DevDummy"

注: "\ s +"は、空白文字に似た正規表現です。

参照: https://www.codedjava.com/2018/06/replace-all-spaces-in-string-trim.html

3
Sameera

これは私のために働きました

scan= filter(scan, " [\\s]+", " ");
scan= sac.trim();

ここで、filterは関数の後に続き、scanは入力文字列です。

public String filter(String scan, String regex, String replace) {
    StringBuffer sb = new StringBuffer();

    Pattern pt = Pattern.compile(regex);
    Matcher m = pt.matcher(scan);

    while (m.find()) {
        m.appendReplacement(sb, replace);
    }

    m.appendTail(sb);

    return sb.toString();
}
1
Mr_Hmp

ストリームバージョン、スペースとタブをフィルタリングします。

Stream.of(str.split("[ \\t]")).filter(s -> s.length() > 0).collect(Collectors.joining(" "))
1
Aris2World

あなたはこうするべきです

String mytext = " hello     there   ";
mytext = mytext.replaceAll("( +)", " ");

丸括弧の内側に+を置きます。

1
kiro malak
String str = " hello world"

最初にスペースを減らす

str = str.trim().replaceAll(" +", " ");

最初の文字を大文字にし、他のすべてを小文字にする

str = str.substring(0,1).toUpperCase() +str.substring(1,str.length()).toLowerCase();
1
KhaledMohamedP

こんにちは、遅れて申し訳ありません。これがあなたが探している最良かつ最も効率的な答えです。

import Java.util.regex.Matcher;
import Java.util.regex.Pattern;

public class MyPatternReplace {

public String replaceWithPattern(String str,String replace){

    Pattern ptn = Pattern.compile("\\s+");
    Matcher mtch = ptn.matcher(str);
    return mtch.replaceAll(replace);
}

public static void main(String a[]){
    String str = "My    name    is  kingkon.  ";
    MyPatternReplace mpr = new MyPatternReplace();
    System.out.println(mpr.replaceWithPattern(str, " "));
}

したがって、この例の出力は次のようになります。私の名前はkingkonです。

ただし、この方法では文字列の "\ n"も削除されます。あなたがそれを望まないのであれば、単にこの単純な方法を使用してください:

while (str.contains("  ")){  //2 spaces
str = str.replace("  ", " "); //(2 spaces, 1 space) 
}

そして、先頭と末尾のスペースも削除したい場合は、以下を追加するだけです。

str = str.trim();
0
Kostas Poime

私がより良い解決策として正規表現を使った2番目の答えを見つける前の私の方法。多分誰かがこのコードを必要としています。

private String replaceMultipleSpacesFromString(String s){
    if(s.length() == 0 ) return "";

    int timesSpace = 0;
    String res = "";

    for (int i = 0; i < s.length(); i++) {
        char c = s.charAt(i);

        if(c == ' '){
            timesSpace++;
            if(timesSpace < 2)
                res += c;
        }else{
            res += c;
            timesSpace = 0;
        }
    }

    return res.trim();
}
0
trinity420

次のコードは単語間の空白を圧縮し、文字列の先頭と末尾の空白を削除します。

String input = "\n\n\n  a     string with     many    spaces,    \n"+
               " a \t tab and a newline\n\n";
String output = input.trim().replaceAll("(\\s)+", " ");
System.out.println(output);

これはa string with many spaces, a tab and a newlineを出力します

スペース、タブ、改行を含む印刷不可能な文字はすべて圧縮または削除されます。


詳細については、それぞれの文書を参照してください。

0
xcuipir

これをチェックしてください...

public static void main(String[] args) {
    String s = "A B  C   D    E F      G\tH I\rJ\nK\tL";
    System.out.println("Current      : "+s);
    System.out.println("Single Space : "+singleSpace(s));
    System.out.println("Space  count : "+spaceCount(s));
    System.out.format("Replace  all = %s", s.replaceAll("\\s+", ""));

    // Example where it uses the most.
    String s = "My name is yashwanth . M";
    String s2 = "My nameis yashwanth.M";

    System.out.println("Normal  : "+s.equals(s2));
    System.out.println("Replace : "+s.replaceAll("\\s+", "").equals(s2.replaceAll("\\s+", "")));

} 

Stringにシングルスペースしか含まれていない場合、replace()は置き換えられません。

スペースが複数ある場合は、replace()アクションを実行してスペースを削除します。

public static String singleSpace(String str){
    return str.replaceAll("  +|   +|\t|\r|\n","");
}

文字列内のスペースの数を数える。

public static String spaceCount(String str){
    int i = 0;
    while(str.indexOf(" ") > -1){
      //str = str.replaceFirst(" ", ""+(i++));
        str = str.replaceFirst(Pattern.quote(" "), ""+(i++)); 
    }
    return str;
}

Pattern 。quote( "?")は、リテラルパターンStringを返します。

0
Yash

String.replaceAllを参照してください。

正規表現"\s"を使用して、" "に置き換えてください。

それからString.trimを使います。

0
Zak

ReplaceAllメソッドがはるかに簡単であることを私は知っていますが、私もこれを投稿したいと思いました。

public static String removeExtraSpace(String input) {
    input= input.trim();
    ArrayList <String> x= new ArrayList<>(Arrays.asList(input.split("")));
    for(int i=0; i<x.size()-1;i++) {
        if(x.get(i).equals(" ") && x.get(i+1).equals(" ")) { 
            x.remove(i); 
            i--; 
        }
    }
    String Word="";
    for(String each: x) 
        Word+=each;
    return Word;
}
0
esranur