如何使用Scala Spark查找字符串中的字符长度

时间:2017-09-19 00:29:33

标签: scala

我试图找到字符串中出现的字符数 在下面的字符串中,我需要找到第一次出现“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”的索引可以在下一个字符串中改变。

感谢您的帮助。谢谢您

2 个答案:

答案 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)
}

或者使用dropWhiletakeWhile,它们可以删除字符串的第一部分,也可以只获取匹配某些条件的字符串的第一部分:

val firstLen = str.dropWhile(_ != 'c').takeWhile(_ == 'c').size
val secondLen = str.dropWhile(_ != 'c').dropWhile(_ == 'c').dropWhile(_ != 'c').takeWhile(_ == 'c').size

如果没有两组'c',前者将无效(结果将为0)。