2008-11-09 18 views

Antwort

17

Das klingt nach dem richtigen Job für reguläre Ausdrücke. Hier finden Sie einige Java-Code Ihnen eine Idee zu geben, falls Sie nicht wissen, wie zu starten:

String input = "Input text, with words, punctuation, etc. Well, it's rather short."; 
Pattern p = Pattern.compile("[\\w']+"); 
Matcher m = p.matcher(input); 

while (m.find()) { 
    System.out.println(input.substring(m.start(), m.end())); 
} 

Das Muster [\w']+ Matches alle Wortzeichen und das Apostroph, mehrere Male. Die Beispielzeichenfolge würde Wort für Wort gedruckt. Werfen Sie einen Blick auf die Java Pattern class documentation, um mehr zu lesen.

+1

Ich musste die Regexp leicht ändern, um keine Zahlen, Unterstriche und keine Wörter zu enthalten, die mit einem Zitat beginnen, aber ansonsten gut! –

+0

Ich musste dem \ w wie folgt entkommen: 'Pattern.compile (" [\\ w '] + ");' – ScrollerBlaster

+0

@ScrollerBlaster Das ist richtig. Ich werde es reparieren, danke! – Tomalak

0

Sie könnten versuchen Regex, mit einem Muster, das Sie gemacht haben, und führen Sie eine Anzahl, wie oft das Muster gefunden wurde.

3

Pseudocode würde wie folgt aussehen:

create words, a list of words, by splitting the input by whitespace 
for every word, strip out whitespace and punctuation on the left and the right 

Der Python-Code würde wie folgt sein:

words = input.split() 
words = [word.strip(PUNCTUATION) for word in words] 

wo

PUNCTUATION = ",. \n\t\\\"'][#*:" 

oder andere Zeichen, die Sie entfernen möchten.

Ich glaube, Java hat gleichwertige Funktionen in der String-Klasse: String .split().


Output diesen Code laufen auf dem Text, den Sie in Ihrem Link zu finden:

>>> print words[:100] 
['Project', "Gutenberg's", 'Manual', 'of', 'Surgery', 'by', 'Alexis', 
'Thomson', 'and', 'Alexander', 'Miles', 'This', 'eBook', 'is', 'for', 
'the', 'use', 'of', 'anyone', 'anywhere', 'at', 'no', 'cost', 'and', 
'with', 'almost', 'no', 'restrictions', 'whatsoever', 'You', 'may', 
'copy', 'it', 'give', 'it', 'away', 'or', 're-use', 'it', 'under', 
... etc etc. 
+0

Der Vorteil dieser Code über reguläre Ausdrücke, dass es kann einfach in einem einzigen Durchgang durchgeführt werden. –

+0

Ja Java hat eine "Split" -Methode, aber es hat nicht das Äquivalent der "Strip" -Methode. –

1

Im Grunde wollen Sie

([A-Za-z]) + (‘entsprechen ([A-Za-z]) *)?

richtig?

3

Hier ist ein guter Ansatz, um Ihr Problem: Diese Funktion Ihren Text als Eingang empfängt und gibt ein Array aller Wörter innerhalb des gegebenen Text

private ArrayList<String> get_Words(String SInput){ 

    StringBuilder stringBuffer = new StringBuilder(SInput); 
    ArrayList<String> all_Words_List = new ArrayList<String>(); 

    String SWord = ""; 
    for(int i=0; i<stringBuffer.length(); i++){ 
     Character charAt = stringBuffer.charAt(i); 
     if(Character.isAlphabetic(charAt) || Character.isDigit(charAt)){ 
      SWord = SWord + charAt; 
     } 
     else{ 
      if(!SWord.isEmpty()) all_Words_List.add(new String(SWord)); 
      SWord = ""; 
     } 

    } 

    return all_Words_List; 

}