Hoe kan ik interpunctie uit invoertekst in Java verwijderen?

Ik probeer een zin te krijgen met invoer van de gebruiker in Java, en ik moet deze in kleine letters maken en alle interpunctie verwijderen. Hier is mijn code:

    String[] words = instring.split("\\s+");
    for (int i = 0; i < words.length; i++) {
        words[i] = words[i].toLowerCase();
    }
    String[] wordsout = new String[50];
    Arrays.fill(wordsout,"");
    int e = 0;
    for (int i = 0; i < words.length; i++) {
        if (words[i] != "") {
            wordsout[e] = words[e];
            wordsout[e] = wordsout[e].replaceAll(" ", "");
            e++;
        }
    }
    return wordsout;

Ik kan geen manier vinden om alle niet-lettertekens te verwijderen. Ik heb geprobeerd regexes en iterators te gebruiken zonder geluk. Bedankt voor alle hulp.


Antwoord 1, autoriteit 100%

Dit verwijdert eerst alle niet-lettertekens, vouwt naar kleine letters, splitst vervolgens de invoer en doet al het werk op één regel:

String[] words = instring.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");

In eerste instantie worden er spaties gelaten in de invoer, zodat de splitsing nog steeds werkt.

Door de onzintekens voordat te splitsen, voorkom je dat je door de elementen moet bladeren.


Antwoord 2, autoriteit 20%

U kunt de volgende reguliere expressieconstructie

Interpunctie: Een van !”#$%&'()*+,-./:;<=>[email protected][]^_`{|}~

inputString.replaceAll("\\p{Punct}", "");

Antwoord 3, autoriteit 6%

U kunt dit proberen:-

Scanner scan = new Scanner(System.in);
System.out.println("Type a sentence and press enter.");
String input = scan.nextLine();
String strippedInput = input.replaceAll("\\W", "");
System.out.println("Your string: " + strippedInput);

[^\w] komt overeen met een niet-woordteken, dus de bovenstaande reguliere expressie komt overeen met en verwijdert alle niet-woordtekens.


Antwoord 4, autoriteit 4%

Als u RegEx niet wilt gebruiken (wat hoogst onnodig lijkt gezien uw probleem), moet u misschien iets als dit proberen:

public String modified(final String input){
    final StringBuilder builder = new StringBuilder();
    for(final char c : input.toCharArray())
        if(Character.isLetterOrDigit(c))
            builder.append(Character.isLowerCase(c) ? c : Character.toLowerCase(c));
    return builder.toString();
}

Het loopt door de onderliggende char[] in de String en voegt alleen de char toe als het een letter of cijfer is alle symbolen, waarvan ik aanneem dat dit is wat u probeert te bereiken) en voegt vervolgens de kleine letterversie van de char toe.


Antwoord 5

Ik gebruik niet graag regex, dus hier is nog een eenvoudige oplossing.

public String removePunctuations(String s) {
    String res = "";
    for (Character c : s.toCharArray()) {
        if(Character.isLetterOrDigit(c))
            res += c;
    }
    return res;
}

Opmerking: dit omvat zowel letters als cijfers

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes