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

时间:2016-01-02 13:14:28

标签: string racket

我通读Racket's string library但找不到与Java / JavaScript的indexOf方法等效的函数。也就是说,是否有一个函数返回较大字符串中子字符串的第一个字符的索引;优选地采用可选的启动参数。类似的东西:

(string-index "foobar" "bar")
;;; returns 3

我很满意列表'member功能。

2 个答案:

答案 0 :(得分:3)

SRFI 13中有很多字符串操作。其中string-contains完全符合您的要求。

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

在此处查看更多内容: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")

答案 1 :(得分:0)

在Racket中没有这样的原始功能,但你可以使用regular expressions,例如:

(regexp-match-positions "example" "This is an example.")
=> '((11 . 18))