在 Racket 中查找子字符串的索引

Cri*_*ian 3 string racket

我通读了Racket 的字符串库,但找不到与 Java/JavaScriptindexOf方法等效的函数。也就是说,是否有一个函数可以返回较大字符串中子字符串的第一个字符的索引;最好是带有可选启动参数的。就像是:

(string-index "foobar" "bar")
;;; returns 3
Run Code Online (Sandbox Code Playgroud)

我对列表功能之类的东西很满意member

soe*_*ard 5

SRFI 13 中有很多可用的字符串操作。其中的操作正是string-contains您想要的。

#lang racket
(require srfi/13) ; the string SRFI    
(string-contains "foobar" "bar")   ; evaluates to 3
Run Code Online (Sandbox Code Playgroud)

在此处查看更多信息:SRFI 13

FWIW 这是一个天真的实现string-index

(define (string-index hay needle)
  (define n (string-length needle))
  (define h (string-length hay))
  (and (<= n h) ; if the needle is longer than hay, then the needle can not be found
       (for/or ([i (- h n -1)]
                #:when (string=? (substring hay i (+ i n)) needle))
         i)))

(string-index "foobar" "bar")
Run Code Online (Sandbox Code Playgroud)