Javaでこの文字列を変更するための迅速で簡単な方法を探してください。
" hello there "
こんな感じに
"hello there"
ここで、文字列の先頭にある1つ以上のスペースも削除したい場合を除いて、これらすべての複数スペースを単一のスペースに置き換えます。
このような何かは私を部分的にそこに連れて行きます
String mytext = " hello there ";
mytext = mytext.replaceAll("( )+", " ");
しかしそうではありません。
これを試して:
String after = before.trim().replaceAll(" +", " ");
String.trim()
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
と突き合わせて置き換えます。あなただけが必要です:
replaceAll("\\s{2,}", " ").trim();
1つ以上のスペースを一致させ、それらを1つのスペースに置き換えてから、最初と最後の空白をトリムします(最初にトリミングしてからマッチングすることで反転させることができます)。
これをすぐに試してみるには:
System.out.println(new String(" hello there ").trim().replaceAll("\\s{2,}", " "));
そしてそれは戻ります:
"hello there"
Apache commonsのStringUtils.normalizeSpace(String str)
メソッドを使用してください。 こちらのドキュメント を参照してください。
これは私にとっては完璧に機能しました:sValue = sValue.trim().replaceAll("\\s+", " ");
文字列の最初と最後のスペースを削除するには、String#trim()
メソッドを使用します。そして、あなたのmytext.replaceAll("( )+", " ")
を使ってください。
最初にString.trim()
を使用してから、結果にregex replaceコマンドを適用することができます。
"[ ]{2,}"
これは複数のスペースに一致します。
String mytext = " hello there ";
//without trim -> " hello there"
//with trim -> "hello there"
mytext = mytext.trim().replaceAll("[ ]{2,}", " ");
System.out.println(mytext);
出力:
hello there
これを試してください。
サンプルコード
String str = " hello there ";
System.out.println(str.replaceAll("( +)"," ").trim());
OUTPUT
hello there
まず、すべてのスペースを単一のスペースに置き換えます。 String
の始まりとString
の終わりをトリミングString
とするのは、String
の開始時にスペースが1つのスペースに置き換えられるためです。 String
の終わりとString
の終わりですので、それらをトリミングする必要があります。あなたが望むよりもString
を得る。
あなたはまたルックアラウンドを使うことができます。
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("^ +| +$| (?= )", "")
);
}
先頭と末尾のスペースのみを削除します。
"Java Docから、"値がこの文字列で、先頭と末尾の空白が削除された文字列を返します。 "
System.out.println(" D ev Dum my ".trim());
"D ev Dum my"
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
これは私のために働きました
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();
}
ストリームバージョン、スペースとタブをフィルタリングします。
Stream.of(str.split("[ \\t]")).filter(s -> s.length() > 0).collect(Collectors.joining(" "))
あなたはこうするべきです
String mytext = " hello there ";
mytext = mytext.replaceAll("( +)", " ");
丸括弧の内側に+を置きます。
String str = " hello world"
最初にスペースを減らす
str = str.trim().replaceAll(" +", " ");
最初の文字を大文字にし、他のすべてを小文字にする
str = str.substring(0,1).toUpperCase() +str.substring(1,str.length()).toLowerCase();
こんにちは、遅れて申し訳ありません。これがあなたが探している最良かつ最も効率的な答えです。
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();
私がより良い解決策として正規表現を使った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();
}
次のコードは単語間の空白を圧縮し、文字列の先頭と末尾の空白を削除します。
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
を出力します
スペース、タブ、改行を含む印刷不可能な文字はすべて圧縮または削除されます。
詳細については、それぞれの文書を参照してください。
これをチェックしてください...
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を返します。
String.replaceAll
を参照してください。
正規表現"\s"
を使用して、" "
に置き換えてください。
それからString.trim
を使います。
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;
}