Как удалить дублирующиеся символы из заданной области в строке? (Учитывая, что у нас есть буфер, из которого мы читаем строку) - PullRequest
0 голосов
/ 09 апреля 2019

В настоящее время я занимаюсь программированием на первом курсе. Нам даны переменные var buffer, marker, cursor, paste, и наша задача - прочитать определенную область буфера, и в этой области удалить все повторяющиеся символы и снова вставить эту область в буфер, чтобы он обновился. Имейте в виду, что я выполняю тесты (J-Unit) по своей программе, и в зависимости от того, сколько она прошла, я получаю адекватную оценку. Эта функция в настоящее время не прошла ни одного из тестов. Вот код:

**class** Buffer(s: String) {

  import scala.collection.mutable.StringBuilder



  private var buffer: StringBuilder = new StringBuilder(s)
  private var cursor: Int = 0 private var marker: Int = 0
  private var paste: String = ""
  private def end: Int = buffer.length              
  private def lwr: Int = Math.min(marker, cursor)
  private def upr: Int = Math.max(marker, cursor)

  def dd() {

    var MarkerToCursor = ""
    var CursorToMarker = ""
    var x = ""
    var y = ""

     //function whcih higlists a certain and then given that reads in characters of the buffer
    if(marker < cursor ){
      for(x <- marker until cursor)
        MarkerToCursor = MarkerToCursor + buffer.charAt(x)
        MarkerToCursor.toString
        x = MarkerToCursor.distinct

    //inserting the highlated area with the string into the buffer and updating it

         buffer = new StringBuilder(getString.substring(0, marker) + y+ getString.substring(cursor, end))
cursor = marker  + x.length      
      }
    else{

     // the same function as the one above except the region consists of charcyters from marker up to cursor.Eveyrything else is the same          
      for(x <- cursor until marker)
        CursorToMarker = CursorToMarker + buffer.charAt(x)
        CursorToMarker.toString
    y = CursorToMarker.distinct

     buffer = new StringBuilder(getString.substring(0, cursor) +y + getString.substring(marker, end))
marker = cursor  + y.length      }
    }
}
}

1 Ответ

1 голос
/ 10 апреля 2019

Как говорит @Dima в комментариях, логика для этого проста.

def removeDuplicatesInRange(str: String, start: Int, end: Int): String =
  str.take(start) + str.slice(start, end).distinct + str.drop(end)

Обратите внимание, что это создает новую строку из старой, вместо использования var или обновления данных на месте. Избежание таких изменяемых данных является одним из ключевых элементов функционального программирования, который является основным направлением языка Scala.

...