#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.