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

标签 string racket

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

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

我会对像列表' member 这样的东西感到满意功能。

最佳答案

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")

关于string - 在 Racket 中查找子字符串的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34566305/

相关文章:

python - 在Python中用数据帧中的平均值替换 '?'时出错

Java核心: data type for variable of changing value

方案的 block 结构效率

syntax - 为什么这是合法的( Racket )计划?

lambda - 将符号映射到值,然后返回一个过程来查找值( Racket )

scheme - R5RS方案中如何 'display'多个参数

racket - Racket中 `,`和 `,@`有什么用?

c++ - 计算 std::string 的分配内存(以及 std::vector 中字符串的使用)

c - 尝试使用#define 将字符串数组分配给变量时出错(无效的初始值设定项错误)

java - Java中如何删除字符串中的某个字符?