2013-09-16 14 views
41

Próbuję uzyskać zdanie za pomocą danych wejściowych od użytkownika w Javie, i muszę zrobić to małe litery i usunąć wszystkie interpunkcji. Oto mój kod:Jak usunąć interpunkcję z tekstu wejściowego w języku Java?

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; 

Nie mogę znaleźć sposobu na usunięcie wszystkich znaków innych niż litery. Próbowałem używać wyrażeń regularnych i iteratorów bez powodzenia. Dzięki za pomoc.

Odpowiedz

75

To pierwsze usuwa wszystkie znaki spoza nas, fałdy na małe litery, następnie rozgałęzia zasilanie, robi wszystkie prace w jednym wierszu:

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

przeznaczone są początkowo w lewo na wejściu więc podział będzie nadal praca.

Po usunięciu znaków podziału na śmieci przed rozdzieleniem unika się konieczności przeplatania elementów.

+32

Jeśli celem jest usunięcie interpunkcji, czy nie "replaceAll (" \\ p {P} "," ") miałoby więcej sensu? – VGR

+0

@VGR na podstawie tytułu tak, ale OP wyjaśnia w pytaniu * usunąć wszystkie znaki inne niż litery * – Bohemian

+1

Czy "å" jest literą? Ponieważ ta postać zostanie usunięta. –

2

Możesz spróbować tego: -

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] dopasowuje charakter non-słowo, więc powyższe wyrażenie regularne dopasuje i usunąć wszystkie znaki inne niż słowo.

+0

To nie zastąpi cyfry. Który, jak sądzę, jest pod literą. –

+1

@RohitJain: - Tak, rozumiem. Ale myślałem, że interpunkcja, którą często używaliśmy w języku. Wziąłem dosłowne znaczenie interpunkcji !!! –

+0

Nie twoja wina. Pytanie OP nie jest jasne. –

3

Jeśli nie chcesz, aby użyć wyrażenia regularnego (co wydaje się wysoce niepotrzebny dany problem), być może warto spróbować czegoś takiego:

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

zapętla się poprzez wiarygodność char[] w String a jedynie dopisuje char, jeśli jest to litera lub cyfra (odfiltrowuje wszystkie symbole, co zakładam, jest tym, co próbujesz osiągnąć), a następnie dołącza małą literę wersji char.

+7

Nikt nigdy nie zaoszczędził czasu, nie ucząc się wyrażeń regularnych – slater

0

Nie lubię korzystać z regex, więc tutaj jest inne proste rozwiązanie.

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

Uwaga: To będzie zawierać zarówno litery i cyfry

Powiązane problemy