Java, как заменить 2 или более пробелов на единое пространство в строке и удалить ведущие и конечные пробелы
Ищете быстрый, простой способ в Java, чтобы изменить эту строку
" hello there "
к тому, что выглядит следующим образом
"hello there"
где я заменяю все эти несколько пробелов одним пробелом, кроме того, что я также хочу, чтобы одно или несколько пробелов в начале строки исчезли.
Что-то вроде этого меня отчасти там
String mytext = " hello there ";
mytext = mytext.replaceAll("( )+", " ");
но не совсем.
Ответы
Ответ 1
Попробуйте следующее:
String after = before.trim().replaceAll(" +", " ");
См. также
Нет trim()
regex
Это также можно сделать только с одним 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
, который фиксирует одно пробел
См. также
Ответ 2
Вам просто нужно:
replaceAll("\\s{2,}", " ").trim();
где вы сопоставляете одно или несколько пробелов и заменяете их одним пространством, а затем обрезаете пробелы в начале и конце (вы можете фактически инвертировать с помощью первой обрезки, а затем сопоставлять, чтобы сделать регулярное выражение быстрее, чем кто-то указал).
Чтобы проверить это быстро, попробуйте:
System.out.println(new String(" hello there ").trim().replaceAll("\\s{2,}", " "));
и он вернется:
"hello there"
Ответ 3
Используйте метод Apocal commons StringUtils.normalizeSpace(String str)
. Смотрите docs here
Ответ 4
Это отлично сработало для меня: sValue = sValue.trim().replaceAll("\\s+", " ");
Ответ 5
Чтобы устранить пробелы в начале и в конце строки, используйте метод String#trim()
. Затем используйте mytext.replaceAll("( )+", " ")
.
Ответ 6
Вы можете сначала использовать String.trim()
, а затем применить команду замены regex в результате.
Ответ 7
"[ ]{2,}"
Это будет соответствовать более чем одному пробелу.
String mytext = " hello there ";
//without trim -> " hello there"
//with trim -> "hello there"
mytext = mytext.trim().replaceAll("[ ]{2,}", " ");
System.out.println(mytext);
ВЫХОД:
hello there
Ответ 8
Попробуйте это.
Пример кода
String str = " hello there ";
System.out.println(str.replaceAll("( +)"," ").trim());
OUTPUT
hello there
Сначала он заменит все пробелы одним пространством. Чем мы должны будем делать trim String
, потому что при запуске String
и в конце String
он заменит все пространство единым пространством, если String
имеет пробелы в начале String
и в конце String
Поэтому нам нужно обрезать их. Затем вы получите желаемый String
.
Ответ 9
отделка()
Удаляет только начальные и конечные пробелы.
Из Java Doc "Возвращает строку, значением которой является эта строка, с удалением всех начальных и конечных пробелов".
System.out.println(" D ev Dum my ".trim());
"D ev Dum my"
replace(), replaceAll()
Заменяет все пустые строки в слове,
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
Ответ 10
Вы также можете использовать образы.
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("^ +| +$| (?= )", "")
);
}
Ответ 11
Следующий код сжимает любые пробелы между словами и удаляет любые в начале и конце строки
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
Обратите внимание, что любые непечатаемые символы, включая пробелы, символы табуляции и переносы строк, будут сжаты или удалены
Для получения дополнительной информации см. Соответствующую документацию:
Ответ 12
String str = " hello world"
уменьшить пробелы сначала
str = str.trim().replaceAll(" +", " ");
загладить первую букву и в нижнем регистре все остальное
str = str.substring(0,1).toUpperCase() +str.substring(1,str.length()).toLowerCase();
Ответ 13
Это сработало для меня
scan= filter(scan, " [\\s]+", " ");
scan= sac.trim();
где фильтр - следующая функция, а сканирование - входная строка:
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();
}
Ответ 14
ты должен сделать это так
String mytext = " hello there ";
mytext = mytext.replaceAll("( +)", " ");
поставить + внутри круглых скобок.
Ответ 15
Потоковая версия, фильтры пробелов и вкладок.
Stream.of(str.split("[ \\t]")).filter(s -> s.length() > 0).collect(Collectors.joining(" "))
Ответ 16
До сих пор было дано много правильных ответов, и я вижу много голосов. Тем не менее, упомянутые способы будут работать, но не очень оптимизированы или не очень читабельны.
Недавно я наткнулся на решение, которое понравится каждому разработчику.
String nameWithProperSpacing = StringUtils.normalizeSpace( stringWithLotOfSpaces );
Вы сделали.
Это читабельное решение.
Ответ 17
См. String.replaceAll
.
Используйте регулярное выражение "\s"
и замените его на " "
.
Затем используйте String.trim
.
Ответ 18
проверьте это...
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.
Ответ 19
Мой метод, прежде чем я нашел второй ответ, используя regex как лучшее решение. Возможно, кому-то нужен этот код.
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();
}
Ответ 20
Привет, извините за задержку! Вот лучший и наиболее эффективный ответ, который вы ищете:
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();
Ответ 21
В Котлине это будет выглядеть так
val input = "\n\n\n a string with many spaces, \n"
val cleanedInput = input.trim().replace(Regex("(\\s)+"), " ")
Ответ 22
public class RemoveExtraSpacesEfficient {
public static void main(String[] args) {
String s = "my name is mr space ";
char[] charArray = s.toCharArray();
char prev = s.charAt(0);
for (int i = 0; i < charArray.length; i++) {
char cur = charArray[i];
if (cur == ' ' && prev == ' ') {
} else {
System.out.print(cur);
}
prev = cur;
}
}
}
Вышеупомянутое решение представляет собой алгоритм со сложностью O (n) без использования какой-либо java-функции.
Ответ 23
Пожалуйста, используйте ниже код
package com.myjava.string;
import java.util.StringTokenizer;
public class MyStrRemoveMultSpaces {
public static void main(String a[]){
String str = "String With Multiple Spaces";
StringTokenizer st = new StringTokenizer(str, " ");
StringBuffer sb = new StringBuffer();
while(st.hasMoreElements()){
sb.append(st.nextElement()).append(" ");
}
System.out.println(sb.toString().trim());
}
}
Ответ 24
Я знаю, что метод 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;
}