WhiteSpace verwijderen van snaren in Java

Ik heb een reeks zoals deze:

mysz = "name=john age=13 year=2001";

Ik wil de witruimten in de tekenreeks verwijderen. Ik heb trim()geprobeerd, maar dit verwijdert alleen witvuren voor en na de hele reeks. Ik heb ook geprobeerd replaceAll("\\W", ""), maar dan wordt de =ook verwijderd.

Hoe kan ik een touwtje bereiken met:

mysz2 = "name=johnage=13year=2001"

Antwoord 1, Autoriteit 100%

st.replaceAll("\\s+","")Verwijdert alle witvakken en niet-zichtbare tekens (bijvoorbeeld tabblad, \n).


st.replaceAll("\\s+","")EN st.replaceAll("\\s","")Produceer hetzelfde resultaat.

De tweede regex is 20% sneller dan de eerste, maar aangezien de nummer opeenvolgende ruimtes toeneemt, presteert de eerste beter dan de tweede.


Wijs de waarde toe aan een variabele, indien niet rechtstreeks gebruikt:

st = st.replaceAll("\\s+","")

Antwoord 2, Autoriteit 19%

replaceAll("\\s","")

\W= alles dat een woordkarakter is

\W= alles dat geen woordkarakter is (inclusief interpunctie enz.)

\s= Alles dat een ruimtekarakter is (inclusief ruimte, tabbladen, enz.)

\s= alles dat geen ruimte-teken is (inclusief zowel letters als cijfers, evenals interpunctie enz.)

(Bewerken: zoals aangegeven, moet u de backslash escapen als u wilt dat \sde regex-engine bereikt, wat resulteert in \\s.)


Antwoord 3, autoriteit 8%

Het meest correcte antwoord op de vraag is:

String mysz2 = mysz.replaceAll("\\s","");

Ik heb deze code zojuist aangepast van de andere antwoorden. Ik post het omdat het niet alleen precies is wat de vraag vroeg, maar ook aantoont dat het resultaat wordt geretourneerd als een nieuwe tekenreeks, de originele tekenreeks niet wordt gewijzigd, zoals sommige antwoorden suggereren.

(Ervaren Java-ontwikkelaars zouden kunnen zeggen “natuurlijk kun je een string niet echt wijzigen”, maar de doelgroep voor deze vraag weet dit misschien niet.)


Antwoord 4, autoriteit 5%

Wat dacht je van replaceAll("\\s", ""). Raadpleeg hier.


Antwoord 5, autoriteit 4%

Een manier om String-manipulaties af te handelen is StringUtils van Apache commons.

String withoutWhitespace = StringUtils.deleteWhitespace(whitespaces);

Je kunt het hiervinden.
commons-lang bevat nog veel meer en wordt goed ondersteund.


Antwoord 6, autoriteit 3%

Als u ook onbreekbare spaties moet verwijderen, kunt u uw code als volgt upgraden:

st.replaceAll("[\\s|\\u00A0]+", "");

Antwoord 7, autoriteit 3%

U zou moeten gebruiken

s.replaceAll("\\s+", "");

in plaats van:

s.replaceAll("\\s", "");

Op deze manier werkt het met meer dan één spaties tussen elke reeks.
Het + -teken in het bovenstaande regex betekent “een of meer \ s”

– \ s = alles dat een ruimtekarakter is (inclusief spatie, tabbladen enz.). Waarom hebben we S + hier nodig?


Antwoord 8, Autoriteit 2%

Als u de voorkeur geeft aan hulpprogramma’s om te regioen, is er een methode Trimallwhitespace (string) in snoerdils in het veerkader.


Antwoord 9, Autoriteit 2%

Je hebt al het juiste antwoord van Gursel Koca, maar ik geloof dat er een goede kans is dat dit niet is wat je echt wilt doen. Hoe zit het met het parseren van de sleutel-waarden in plaats daarvan?

import java.util.Enumeration;
import java.util.Hashtable;
class SplitIt {
  public static void main(String args[])  {
    String person = "name=john age=13 year=2001";
    for (String p : person.split("\\s")) {
      String[] keyValue = p.split("=");
      System.out.println(keyValue[0] + " = " + keyValue[1]);
    }
  }
}

Uitgang:
Naam = John
LEEFTIJD = 13
jaar = 2001


Antwoord 10

De eenvoudigste manier om dit te doen is door gebruik te maken van de org.apache.commons.lang3.StringUtilsklasse van commons-lang3Bibliotheek zoals “commons-lang3-3.1.jar“bijvoorbeeld.

Gebruik de statische methode “StringUtils.deleteWhitespace(String str)” op uw invoertekenreeks & het geeft je een string terug nadat je alle witruimten hebt verwijderd. Ik heb je voorbeeldstring “name=john age=13 year=2001” geprobeerd & het gaf me precies de string die je wilde – “name=johnage=13year=2001“. Ik hoop dat dit helpt.


Antwoord 11

U kunt dit eenvoudig doen door

String newMysz = mysz.replace(" ","");

Antwoord 12

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

Antwoord 13

mysz = mysz.replace(" ","");

Eerst met spatie, ten tweede zonder spatie.

Dan is het klaar.


Antwoord 14

String a="string with                multi spaces ";
//or this 
String b= a.replaceAll("\\s+"," ");
String c= a.replace("    "," ").replace("   "," ").replace("  "," ").replace("   "," ").replace("  "," ");

//het werkt prima met alle spaties
*vergeet geen spatie in sting b


Antwoord 15

Gebruik apache string util class is beter om NullPointerException te vermijden

org.apache.commons.lang3.StringUtils.replace("abc def ", " ", "")

Uitvoer

abcdef

Antwoord 16

\Wbetekent “niet-woordteken”. Het patroon voor witruimtetekens is \s. Dit is goed gedocumenteerd in het Pattern javadoc.


Antwoord 17

In Java kunnen we de volgende bewerking uitvoeren:

String pattern="[\\s]";
String replace="";
part="name=john age=13 year=2001";
Pattern p=Pattern.compile(pattern);
Matcher m=p.matcher(part);
part=m.replaceAll(replace);
System.out.println(part);

hiervoor moet u de volgende pakketten in uw programma importeren:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

ik hoop dat het je zal helpen.


Antwoord 18

Met Pattern And Matcher is het dynamischer.

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);    
    }
}

Antwoord 19

Gebruik mysz.replaceAll("\\s+","");


Antwoord 20

Als je st.replaceAll("\\s+","")gebruikt in Kotlin, zorg er dan voor dat je "\\s+"met Regex:

"myString".replace(Regex("\\s+"), "")

Antwoord 21

Ik probeer een aggregatieantwoord waarbij ik alle manieren test om alle witruimten in een string te verwijderen.
Elke methode wordt 1 miljoen keer uitgevoerd en vervolgens wordt het gemiddelde genomen. Opmerking: er zal enige rekenkracht worden gebruikt bij het optellen van alle runs.


Resultaten:

1e plaats van @jahir’s antwoord

  • StringUtils met korte tekst: 1,21E-4 ms (121,0 ms)
  • StringUtils met lange tekst: 0,001648 ms (1648,0 ms)

2e plaats

  • Stringbuilder met korte tekst: 2,48E-4 ms (248,0 ms)
  • Stringbuilder met lange tekst: 0,00566 ms (5660,0 ms)

3e plaats

  • Regex met korte tekst: 8.36E-4 ms (836,0 ms)
  • Regex met lange tekst: 0,008877 ms (8877,0 ms)

4e plaats

  • For-lus met korte tekst: 0,001666 ms (1666,0 ms)
  • For-lus met lange tekst: 0,086437 ms (86437,0 ms)

Hier is de code:

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();
    }
}

Hier zijn de tests:

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
                )
        );
    }
}

Antwoord 22

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);
    }
}

Antwoord 23

Om spaties in uw voorbeeld te verwijderen, is dit een andere manier om het te doen:

String mysz = "name=john age=13 year=2001";
String[] test = mysz.split(" ");
mysz = String.join("", mysz);

Wat dit doet, is dat het het omzet in een array met de spaties als scheidingstekens, en vervolgens de items in de array samenvoegt zonder de spaties.

Het werkt redelijk goed en is gemakkelijk te begrijpen.


Antwoord 24

er zijn veel manieren om dit probleem op te lossen.
je kunt de split-functie gebruiken of de functie van Strings vervangen.

raadpleeg voor meer info een vergelijkbaar probleem http://techno-terminal.blogspot.in/2015/10/how-to-remove-spaces-from-given-string.html


Antwoord 25

Er zijn ook andere spatietekens die in tekenreeksen voorkomen. Dus spatietekens die we mogelijk moeten vervangen door tekenreeksen.

Bijvoorbeeld: NO-BREAK RUIMTE, DRIE-PER-EM RUIMTE, PUNCTUATIERUIMTE

Hier is de lijst met space char http://jkorpela.fi/chars/spaces.html

Dus we moeten aanpassen

\u2004 ons voor DRIE-PER-EM RUIMTE

s.replaceAll(“[\u0020\u2004]”,””)


Antwoord 26

Witruimte kan worden verwijderd met de functie isWhitespace uit 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);
}

Antwoord 27

Scheid elke groep tekst in zijn eigen subtekenreeks en voeg die subtekenreeksen vervolgens samen:

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);  
    }
}

Antwoord 28

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;
}

Dit kan helpen.


Antwoord 29

U kunt ook een kijkje nemen op de onderstaande Java-code. De volgende codes gebruiken geen “ingebouwde” methoden.

/**
 * 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));
    }
}

Invoer:

String inp = "01239Debashish123Pattn456aik";

Uitgang:

The String is: 01239123456

ANTWOORD 30

private String generateAttachName(String fileName, String searchOn, String char1) {
    return fileName.replaceAll(searchOn, char1);
}
String fileName= generateAttachName("Hello My Mom","\\s","");

Other episodes