2016-04-29 10 views
3

Ich möchte einen Algorithmus schreiben, der jedes Wort, beginnend mit einem Großbuchstaben in einer Zeichenfolge entfernt.Entfernen Sie Wörter einer Zeichenfolge von Großbuchstaben in Scala gestartet

Zum Beispiel:

Original-String: "Heute ist Freitag der 29."

Gewünschtes Ergebnis: "ist das 29Th."

Ich schrieb diesen Algorithmus, aber es nicht ganz vollständig ist:

def removeUpperCaseChars(str: String) = { 
    for (i <- 0 to str.length - 1) { 
     if (str.charAt(i).isUpper) { 
     var j = i 
     var cont = i 
     while (str.charAt(j) != " ") { 
      cont += 1 
     } 
     val subStr = str.substring(0, i) + str.substring(cont, str.length - 1) 
     println(subStr) 
     } 
    } 
    } 

It (angeblich) nur die Worte jedes Wort mit Großbuchstaben anstatt sie zu entfernen entfernt, die mit Großbuchstaben beginnen. Und schlimmer noch, Scala gibt kein Ergebnis.

Kann mir jemand bei diesem Problem helfen?

Antwort

5

Mit einigen Annahmen, wie Wörter sind immer mit einem Raum geteilt können Sie es wie folgt implementieren:

scala> "Today is Friday the 29Th.".split("\\s+").filterNot(_.head.isUpper).mkString(" ") 
res2: String = is the 29Th. 

Wir wollen nicht wirklich Algorithmen in der Art und Weise zu schreiben, um Sie in scala tat. Dies ist eine Art, wie Sie dies in C. tun würden.

+0

oder einfach 'split (" + ")', um eine beliebige Anzahl von Leerzeichen zuzulassen. – ale64bit

+1

Ja, ich weiß das, oder besser '\\ s +' aber nach dem Verbinden Wörter, wird es immer mit einem Leerzeichen sein, so können wir einige Leerzeichen verlieren, deshalb habe ich eine Annahme gemacht, aber vielleicht Code wird besser mit \ \ s +. –

+0

Nun, es war viel einfacher als ich dachte. Danke, das war genau das was ich gesucht habe. – undisp

1

Wie wäre es mit string.replaceAll("""\b[A-Z]\w+""", "")?

+0

Sie wollen wahrscheinlich auch whitespace nach word passen, sonst bleibt es ihnen "_is__the_29." ' –

+0

Nun, die Frage war, _words_ zu entfernen, es sagte nichts über whitespace. – Dima

+0

Ja richtig, aber es hat immer noch eine Aussage "Gewünschtes Ergebnis:" ist das 29Th. ": P –

Verwandte Themen