Just a quick note here today on how to show methods from the String
class in the Scala REPL, as well as methods from the StringOps
class, which aren't seen as easily.
First, if you've used tab completion in the REPL, you may already know that you can show many Scala String
class methods in the REPL. If you hit the [Tab] key once you'll see a short list of String
methods:
scala> "foo".[Tab] + asInstanceOf charAt codePointAt codePointBefore codePointCount compareTo compareToIgnoreCase concat contains contentEquals endsWith equalsIgnoreCase getBytes getChars indexOf intern isEmpty isInstanceOf lastIndexOf length matches offsetByCodePoints regionMatches replace replaceAll replaceFirst split startsWith subSequence substring toCharArray toLowerCase toString toUpperCase trim
And then if you hit the [Tab] key a second time you'll see even more String
class methods:
scala> "foo".[Tab][Tab] != ## $asInstanceOf $isInstanceOf + == asInstanceOf charAt codePointAt codePointBefore codePointCount compareTo compareToIgnoreCase concat contains contentEquals endsWith eq equals equalsIgnoreCase getBytes getChars getClass hashCode indexOf intern isEmpty isInstanceOf lastIndexOf length matches ne notify notifyAll offsetByCodePoints regionMatches replace replaceAll replaceFirst split startsWith subSequence substring synchronized this toCharArray toLowerCase toString toUpperCase trim wait
How to show StringOps methods in the REPL
You may be aware that the Scala String
class appears to have many more methods, and these methods are made available to you through some implicit conversion magic. Those methods are actually in the StringOps class, and at the moment the only way I know to show those methods is like this:
scala> val s = new scala.collection.immutable.StringOps("s") s: scala.collection.immutable.StringOps = s scala> s.[Tab] * ++ ++: +: /: /:\ :+ :\ > >= addString aggregate apply asInstanceOf canEqual capitalize collect collectFirst combinations compare compareTo contains containsSlice copyToArray copyToBuffer corresponds count diff distinct drop dropRight dropWhile elements endsWith equalsWith exists filter filterNot find findIndexOf findLastIndexOf first firstOption flatMap fold foldLeft foldRight forall foreach format formatLocal groupBy grouped hasDefiniteSize head headOption indexOf indexOfSlice indexWhere indices init inits intersect isDefinedAt isEmpty isInstanceOf isTraversableAgain iterator last lastIndexOf lastIndexOfSlice lastIndexWhere lastOption length lengthCompare lines linesIterator linesWithSeparators map max maxBy min minBy mkString nonEmpty padTo par partition patch permutations prefixLength product projection r reduce reduceLeft reduceLeftOption reduceOption reduceRight reduceRightOption replaceAllLiterally repr reverse reverseIterator reverseMap reversedElements sameElements scan scanLeft scanRight segmentLength seq size slice sliding sortBy sortWith sorted span split splitAt startsWith stringPrefix stripLineEnd stripMargin stripPrefix stripSuffix sum tail tails take takeRight takeWhile toArray toBoolean toBuffer toByte toDouble toFloat toIndexedSeq toInt toIterable toIterator toList toLong toMap toSeq toSet toShort toStream toString toTraversable union updated view withFilter zip zipAll zipWithIndex
There are several drawbacks here, including the part where you have to remember what package the StringOps
class is in so you can import it or invoke it as shown.
If you know of a better way to list these StringOps
methods, I'd be very glad to hear about it. Just leave a note in the Comments section below.