2016-04-29 3 views
3

Я хочу написать алгоритм, который удаляет каждое слово, начинающееся символом в верхнем регистре в строке.Удалить слова строки, начинающейся с символов верхнего регистра в Scala

Например:

Оригинальная строка: "Сегодня пятница 29-го"

Желаемый результат: "is the 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. 

Мы действительно не хотим писать алгоритмы в том, как вы это делали в Скале. Это можно сделать так, чтобы вы сделали это в C.

+0

или просто 'split (" + ")', чтобы разрешить любое количество пробелов. – ale64bit

+1

Да, я знаю это или лучше '\\ s +', но после присоединения слов он всегда будет с одним пробелом, поэтому мы можем потерять некоторые пробелы, поэтому я сделал предположение, но, возможно, код будет лучше с \ \ S +. –

+0

Ну, это было намного проще, чем я думал. Спасибо, это именно то, что я искал. – undisp

1

Как насчет string.replaceAll("""\b[A-Z]\w+""", "")?

+0

Возможно, вы захотите также сопоставить пробелы после слова, иначе они оставят их '' _is__the_29. '' –

+0

Ну, вопрос состоял в том, чтобы удалить _words_, он ничего не сказал про пробелы. – Dima

+0

Да, но у него все еще есть инструкция 'Желаемый результат:" это 29Th. "': P –

Смежные вопросы