2

誰かが私が文字列が別の文字列の部分文字列であるかどうかをチェックする関数を書くのを手伝ってもらえますか?

(2つ以上の文字列が存在する可能性があります)

ありがとう

4

4 に答える 4

6

モジュールString付き:

let contains s1 s2 =
  try
    let len = String.length s2 in
    for i = 0 to String.length s1 - len do
      if String.sub s1 i len = s2 then raise Exit
    done;
    false
  with Exit -> true

モジュールを使用Strすると、@ barti_dduが言ったように、このトピックを確認してください:

let contains s1 s2 =
    let re = Str.regexp_string s2 in
    try 
       ignore (Str.search_forward re s1 0); 
       true
    with Not_found -> false
于 2012-06-26T08:15:05.137 に答える
4

バッテリーでは、String.existsを使用できます。ExtLib:String.existsにも存在します。

于 2012-06-26T11:21:23.973 に答える
2

Stringパフォーマンスが向上し、メモリ使用量が少なくなる可能性のある、cagoの回答に基づくベースの代替手段:

let is_substring string substring = 
  let ssl = String.length substring and sl = String.length string in 
  if ssl = 0 || ssl > sl then false else 
    let max = sl - ssl and clone = String.create ssl in
    let rec check pos = 
      pos <= max && (
        String.blit string pos clone 0 ssl ; clone = substring 
        || check (String.index_from string (succ pos) substring.[0])
      )
    in             
    try check (String.index string substring.[0])
    with Not_found -> false
于 2012-06-26T12:56:34.073 に答える
-10
String str="hello world";


System.out.println(str.contains("world"));//true

System.out.println(str.contains("world1"));//false
于 2013-04-24T17:45:21.180 に答える