Reputation: 8481
I have a string like this:
mysz = "name=john age=13 year=2001";
I want to remove the whitespaces in the string. I tried trim()
but this removes only whitespaces before and after the whole string. I also tried replaceAll("\\W", "")
but then the =
also gets removed.
How can I achieve a string with:
mysz2 = "name=johnage=13year=2001"
Upvotes: 846
Views: 1716275
Reputation: 51
use StrUtil.cleanBlank(CharSequence str) by hutool
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.16</version>
</dependency>
Upvotes: 0
Reputation: 71
You can achieve this without using replaceAll() or any Predefined Method in Java. this way is preferred:-
public class RemoveSpacesFromString {
public static void main(String[] args) {
// TODO Auto-generated method stub
String newString;
String str = "prashant is good" ;
int i;
char[] strArray = str.toCharArray();
StringBuffer sb = new StringBuffer();
for(i = 0; i < strArray.length; i++)
{
if(strArray[i] != ' ' && strArray[i] != '\t')
{
sb.append(strArray[i]);
}
}
System.out.println(sb);
}
}
Upvotes: -2
Reputation: 117
package com.sanjayacchana.challangingprograms;
public class RemoveAllWhiteSpacesInString {
public static void main(String[] args) {
String str = "name=john age=13 year=2001";
str = str.replaceAll("\\s", "");
System.out.println(str);
}
}
Upvotes: 2
Reputation: 703
You should use
s.replaceAll("\\s+", "");
instead of:
s.replaceAll("\\s", "");
This way, it will work with more than one spaces between each string. The + sign in the above regex means "one or more \s"
--\s = Anything that is a space character (including space, tab characters etc). Why do we need s+ here?
Upvotes: 57
Reputation: 2619
I am trying an aggregation answer where I test all ways of removing all whitespaces in a string. Each method is ran 1 million times and then then the average is taken. Note: Some compute will be used on summing up all the runs.
1st place from @jahir 's answer
2nd place
3rd place
4th place
public class RemoveAllWhitespaces {
public static String Regex(String text){
return text.replaceAll("\\s+", "");
}
public static String ForLoop(String text) {
for (int i = text.length() - 1; i >= 0; i--) {
if(Character.isWhitespace(text.codePointAt(i))) {
text = text.substring(0, i) + text.substring(i + 1);
}
}
return text;
}
public static String StringBuilder(String text){
StringBuilder builder = new StringBuilder(text);
for (int i = text.length() - 1; i >= 0; i--) {
if(Character.isWhitespace(text.codePointAt(i))) {
builder.deleteCharAt(i);
}
}
return builder.toString();
}
}
import org.junit.jupiter.api.Test;
import java.util.function.Function;
import java.util.stream.IntStream;
import static org.junit.jupiter.api.Assertions.*;
public class RemoveAllWhitespacesTest {
private static final String longText = "123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222123 123 \t 1adc \n 222";
private static final String expected = "1231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc2221231231adc222";
private static final String shortText = "123 123 \t 1adc \n 222";
private static final String expectedShortText = "1231231adc222";
private static final int numberOfIterations = 1000000;
@Test
public void Regex_LongText(){
RunTest("Regex_LongText", text -> RemoveAllWhitespaces.Regex(text), longText, expected);
}
@Test
public void Regex_ShortText(){
RunTest("Regex_LongText", text -> RemoveAllWhitespaces.Regex(text), shortText, expectedShortText);
}
@Test
public void For_LongText(){
RunTest("For_LongText", text -> RemoveAllWhitespaces.ForLoop(text), longText, expected);
}
@Test
public void For_ShortText(){
RunTest("For_LongText", text -> RemoveAllWhitespaces.ForLoop(text), shortText, expectedShortText);
}
@Test
public void StringBuilder_LongText(){
RunTest("StringBuilder_LongText", text -> RemoveAllWhitespaces.StringBuilder(text), longText, expected);
}
@Test
public void StringBuilder_ShortText(){
RunTest("StringBuilder_ShortText", text -> RemoveAllWhitespaces.StringBuilder(text), shortText, expectedShortText);
}
private void RunTest(String testName, Function<String,String> func, String input, String expected){
long startTime = System.currentTimeMillis();
IntStream.range(0, numberOfIterations)
.forEach(x -> assertEquals(expected, func.apply(input)));
double totalMilliseconds = (double)System.currentTimeMillis() - (double)startTime;
System.out.println(
String.format(
"%s: %s ms (%s ms)",
testName,
totalMilliseconds / (double)numberOfIterations,
totalMilliseconds
)
);
}
}
Upvotes: 6
Reputation: 2836
Quite a lot of answers are provided. I would like to give a solution which is quite readable and better than regex.
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();
}
}
Upvotes: -1
Reputation: 5495
private String generateAttachName(String fileName, String searchOn, String char1) {
return fileName.replaceAll(searchOn, char1);
}
String fileName= generateAttachName("Hello My Mom","\\s","");
Upvotes: -1
Reputation: 663
You can also take a look at the below Java code. Following codes does not use any "built-in" methods.
/**
* 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));
}
}
Input:
String inp = "01239Debashish123Pattn456aik";
Output:
The String is: 01239123456
Upvotes: -1
Reputation: 114
Try this:
String str="name=john age=13 year=2001";
String s[]=str.split(" ");
StringBuilder v=new StringBuilder();
for (String string : s) {
v.append(string);
}
str=v.toString();
Upvotes: -6
Reputation: 211
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;
}
This might help.
Upvotes: -1
Reputation: 115
Separate each group of text into its own substring and then concatenate those substrings:
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);
}
}
Upvotes: -1
Reputation: 10038
When using st.replaceAll("\\s+","")
in Kotlin, make sure you wrap "\\s+"
with Regex:
"myString".replace(Regex("\\s+"), "")
Upvotes: 4
Reputation: 3502
There are others space char too exists in strings.. So space char we may need to replace from strings.
Ex: NO-BREAK SPACE, THREE-PER-EM SPACE, PUNCTUATION SPACE
Here is the list of space char http://jkorpela.fi/chars/spaces.html
So we need to modify
\u2004 us for THREE-PER-EM SPACE
s.replaceAll("[\u0020\u2004]","")
Upvotes: 1
Reputation: 1656
White space can remove using isWhitespace function from Character Class.
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);
}
Upvotes: 1
Reputation: 11234
Use apache string util class is better to avoid NullPointerException
org.apache.commons.lang3.StringUtils.replace("abc def ", " ", "")
Output
abcdef
Upvotes: 3
Reputation: 862
If you need to remove unbreakable spaces too, you can upgrade your code like this :
st.replaceAll("[\\s|\\u00A0]+", "");
Upvotes: 53
Reputation: 163
To remove spaces in your example, this is another way to do it:
String mysz = "name=john age=13 year=2001";
String[] test = mysz.split(" ");
mysz = String.join("", mysz);
What this does is it converts it into an array with the spaces being the separators, and then it combines the items in the array together without the spaces.
It works pretty well and is easy to understand.
Upvotes: 2
Reputation: 401
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);
}
}
Upvotes: 2
Reputation: 559
The easiest way to do this is by using the org.apache.commons.lang3.StringUtils
class of commons-lang3
library such as "commons-lang3-3.1.jar
" for example.
Use the static method "StringUtils.deleteWhitespace(String str)
" on your input string & it will return you a string after removing all the white spaces from it. I tried your example string "name=john age=13 year=2001
" & it returned me exactly the string that you wanted - "name=johnage=13year=2001
". Hope this helps.
Upvotes: 11
Reputation: 3625
Using Pattern And Matcher it is more Dynamic.
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);
}
}
Upvotes: 3
Reputation: 21280
st.replaceAll("\\s+","")
removes all whitespaces and non-visible characters (e.g., tab, \n
).
st.replaceAll("\\s+","")
and st.replaceAll("\\s","")
produce the same result.
The second regex is 20% faster than the first one, but as the number consecutive spaces increases, the first one performs better than the second one.
Assign the value to a variable, if not used directly:
st = st.replaceAll("\\s+","")
Upvotes: 1522
Reputation: 81
String a="string with multi spaces ";
//or this
String b= a.replaceAll("\\s+"," ");
String c= a.replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ").replace(" "," ");
//it work fine with any spaces *don't forget space in sting b
Upvotes: 4
Reputation: 531
You can do it so simply by
String newMysz = mysz.replace(" ","");
Upvotes: 9
Reputation: 1651
there are many ways to solve this problem. you can use split function or replace function of Strings.
for more info refer smilliar problem http://techno-terminal.blogspot.in/2015/10/how-to-remove-spaces-from-given-string.html
Upvotes: 1
Reputation: 871
One way to handle String manipulations is StringUtils from Apache commons.
String withoutWhitespace = StringUtils.deleteWhitespace(whitespaces);
You can find it here. commons-lang includes lots more and is well supported.
Upvotes: 87
Reputation: 323
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
Upvotes: 6
Reputation: 71
mysz = mysz.replace(" ","");
First with space, second without space.
Then it is done.
Upvotes: 4
Reputation: 545
The code you want is
str.replaceAll("\\s","");
This will remove all the white spaces.
Upvotes: -2
Reputation: 5219
The most correct answer to the question is:
String mysz2 = mysz.replaceAll("\\s","");
I just adapted this code from the other answers. I'm posting it because besides being exactly what the question requested, it also demonstrates that the result is returned as a new string, the original string is not modified as some of the answers sort of imply.
(Experienced Java developers might say "of course, you can't actually modify a String", but the target audience for this question may well not know this.)
Upvotes: 123