Logo

Programming-Idioms

This language bar is your friend. Select your favorite languages!

Idiom #219 Replace multiple spaces with single space

Create the string t from the value of string s with each sequence of spaces replaced by a single space.

Explain if only the space characters will be replaced, or the other whitespaces as well: tabs, newlines.

let t = s.replaceAll(/ {2,}/g, '')
let t = s.replaceAll(/\s{2,}/g, '')
let t = s.replace(/\s+/g, ' ');
(def t (clojure.string/replace s #"\s+" " "))
using System.Text.RegularExpressions;
string t = Regex.Replace(s, " +", " ");
using System.Text.RegularExpressions;
string t = Regex.Replace(s, @"\s+", " ");
var t = s.replaceAll(RegExp(r"\s+"), " ");
singleSpace(Text) ->
        singleSpace(0, Text).

singleSpace(_, []) -> [];
singleSpace(32, [32 | Rest]) ->
        singleSpace(32, Rest);
singleSpace(32, [Ch | Rest]) ->
        [Ch] ++ singleSpace(Ch,  Rest);
singleSpace(Last, [Ch | Rest]) ->
                [Ch] ++ singleSpace(Ch, Rest).


%%singleSpace("this is  a      text  with        multiple spaces").
import "regexp"
whitespaces := regexp.MustCompile(`\s+`)
t := whitespaces.ReplaceAllString(s, " ")
def t = s.replaceAll(/\s+/, ' ')
t= unwords $ words s
String t = s.replaceAll(" +", " ");
import static java.lang.String.join;
String t = join(" ", s.split(" +", -1));
String t = s.replaceAll(" {2,}", " ");
String t = s.replaceAll("\\s+", " ");
(defun words (str)
  (if (equalp str "") nil 
      (let ((p (position #\Space str )))
    (cond ((null p) (list str))
          ((zerop p ) (words (subseq str 1)))
          (T (cons (subseq str 0 p) (words (subseq str (+ 1 p ))))))))) 

(setf s " aa  bbb  cc1 ")

 (let ((ws (words s )))
   (setf t (car ws))
   (dolist (w (cdr ws ))
     (setf t (concatenate 'string t " " w ))))
 (print t)
 
local t = s:gsub("%s+", " ")
$t = preg_replace('/\s+/', ' ', $s);
$t = $s;
do $t = str_replace('  ', ' ', $t, $count); while($count);
regexpr
  t := ReplaceRegExpr('\s+',s,' ',False);
var
  i, j: integer;
  t,s: string;
const
  whitespace = [#32,#13,#10,#9];
begin
  ....
  t := '';
  j := 0;
  setlength(t, length(s));
  for i := 1 to length(s) do
    if not ((s[i] in whitespace) and 
            ((i < length(s)) and (s[i+1] in whitespace))) then
    begin
      inc(j);
      t[j] := s[i];
    end;
  setlength(t,j);
end.
uses sysutils;
  t := s;
  while Pos('  ',t) > 0 do
    t := StringReplace(t, '  ', ' ', [rfReplaceAll]);
my $t = $s;
$t =~ s/\s+/ /g;
my $t = $s;
$t =~ s/ +/ /g;
t: str = " ".join(s.split())
import re
t = re.sub(' +', ' ', s)
from re import split
t = ' '.join(split(' {2,}', s))
from re import split
t = ' '.join(split(r'\s{2,}', s))
t = s.squeeze(" ")
use regex::Regex;
let re = Regex::new(r"\s+").unwrap();
let t = re.replace_all(s, " ");
Imports System.Text.RegularExpressions
Dim t As String = Regex.Replace(s, "\s+", " ")
Imports System.Text.RegularExpressions
Dim t As String = Regex.Replace(s, " +", " ")

New implementation...
< >
programming-idioms.org