2016-04-29 9 views
3

文字列内に大文字で始まるすべての単語を削除するアルゴリズムを作成します。例えばScalaの大文字で始まる文字列の単語を削除します

オリジナルの文字列: "今日は金曜日29日です"

希望の結果: "29Thです。"

私はこのアルゴリズムを書いたが、それは完全なものではありません。

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

それは(たぶん)の代わりに大文字で始まる単語だけを取り除くの大文字ですべての単語を削除します。そしてそれより悪いことに、Scalaは何の結果も与えません。

誰でもこの問題を解決できますか?いくつかの仮定で

答えて

5

、言葉は常にスペースで分割されているようにあなたは、このようにそれを実装することができます

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

私たちは本当にあなたがScalaで行った方法でアルゴリズムを記述する必要はありません。これは、あなたがCでこれをやってくれるかのようなことです。

+0

または任意の数のスペースを許可するには 'split(" + ")'のみです。 – ale64bit

+1

はい、私はそれを知っています、それとももっと良い '\\ s +'ですが、単語を結合した後は常に1つの空白があるので、空白を失うかもしれません。これが私が仮定した理由ですが、 \ s +。 –

+0

それは私が思ったよりずっと簡単でした。ありがとう、これはまさに私が探していたものでした。 – undisp

1

どうすればstring.replaceAll("""\b[A-Z]\w+""", "")についてですか?

+0

あなたはたぶん単語の後に空白をマッチさせたいと思うかもしれませんが、とにかくそれはそれらを '' _is__the_29 ''にします。 '' –

+0

よくある質問は空白については何も言わなかった_words_を取り除くことでした。 – Dima

+0

ええ、そうですが、依然として「望ましい結果:」という言葉が29Thです。「p: –

関連する問題