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

#string #scala #duplicates

#строка #scala #дубликаты

Вопрос:

В настоящее время я выполняю свое задание по программированию на первом курсе обучения. Нам даны переменные 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. input.drop(from) input.substring(from, to).distinct input.drop(to)

2. getString в сочетании с методом substring(x,y) получает строку между двумя переменными (x,y) (прочитанная в строке строка является частью буфера). Это то, что вы хотели знать? Кстати, он компилируется в моей программе, хотя то, что я опубликовал, является частью более крупной программы, так что в этом может быть проблема.

Ответ №1:

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

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

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