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 !”#$%&'()*+,-./:;<=>?@[]^_`{|}~
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