我试图找到字符串中出现的字符数 在下面的字符串中,我需要找到第一次出现“c”的次数和第二次出现的次数“c”
public function store(Requests\InviteRequest $request) {
$this->validate($request, array(
'user_id' => 'required',
'business_id' => 'required',
'referral_name' => 'required',
));
DB::table('invites')->insert([
'user_id' => $request->user_id,
'business_id' => $request->business_id,
'referral_name' => $request->referral_name,
'url_token' => str_random(16),
// If you don't use timestamp delete these lines below
'created_at' => Carbon::now()->format('Y-m-d H:i:s'),
'updated_at' => Carbon::now()->format('Y-m-d H:i:s'),
]);
return redirect('/admin/invites')->with([
'message' => "Successfully Added New",
'alert-type' => 'success',
]);
}
对于上述结果,结果应为4和6
Ex: "abccccsdegccccccd"
我尝试使用普通分割但我没有得到预期的结果。“c”的索引可以在下一个字符串中改变。
感谢您的帮助。谢谢您
答案 0 :(得分:3)
了解所有' c'序列。
test.split("[^c]").collect{case s if s.nonEmpty => s.length}
// res0: Array[Int] = Array(4, 6)
如果没有' c'则返回空的Array[Int]
。字符串中的字符。
答案 1 :(得分:2)
你可以使用正则表达式来实现:
val regex = "[^c]+(c+)[^c]+(c+).*".r
val result = "abccccsdegccccccd" match {
case regex(first, second) => (first.size, second.size)
}
或者使用dropWhile
和takeWhile
,它们可以删除字符串的第一部分,也可以只获取匹配某些条件的字符串的第一部分:
val firstLen = str.dropWhile(_ != 'c').takeWhile(_ == 'c').size
val secondLen = str.dropWhile(_ != 'c').dropWhile(_ == 'c').dropWhile(_ != 'c').takeWhile(_ == 'c').size
如果没有两组'c',前者将无效(结果将为0)。