文字列に含まれる、特定の文字列をカウント。(C#、Java、JavaScript、PHP、Python3、Ruby比較)

 今回は、文字列の中から、特定の文字列(1文字の場合を含む)の個数をカウントする処理について。

 文字列1とカウント対象の文字列(文字列2)の2つの文字列を標準入力から読み込み、文字列1に含まれる文字列2の個数を出力する処理を、C#、Java、JavaScript、PHP、Python3、Rubyの6言語で書いています。

C#
using System;

public class Sample{
    public static void Main(){
        var line1 = Console.ReadLine().Trim();
        var line2 = Console.ReadLine().Trim();

        //カウント対象の文字列を配列に変換
        string[] sep = new string[] { line2 };

        //文字列を分割し、個数-1で対象の文字列数を求める。
        var arr = line1.Split(sep, StringSplitOptions.None);
        Console.WriteLine(arr.Length-1);
    }
}

 .split()で文字列2で文字列1を分割して配列に入れ、その配列の要素数-1で、文字列1中に含まれる文字列2の個数をカウントできます。文字列2は複数文字でもOK。

 .split()の第1引数には、配列に変換した文字列2、第2引数には、StringSplitOptions.Noneを入れます。

Java
import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        Scanner sc = new Scanner(System.in);
        String line1 = sc.nextLine().trim();
        String line2 = sc.nextLine().trim();

        //文字列を分割し、個数-1で対象の文字列数を求める。
        String[] arr = line1.split(line2,-1);
        System.out.println(arr.length-1);
    }
}

 .split()で文字列2で文字列1を分割して配列に入れ、その配列の要素数-1で、文字列1中に含まれる文字列2の個数をカウントできます。文字列2は複数文字でもOK。

 .split()で文字列を分割する場合、第2引数に-1を入れておきます。そうしないと、対象文字列が終端にある場合に正常にカウントされないです。

JavaScript
process.stdin.resume();
process.stdin.setEncoding('utf8');

var lines = [];
var reader = require('readline').createInterface({
  input: process.stdin,
  output: process.stdout
});
reader.on('line', (line) => {
  lines.push(line);
});
reader.on('close', () => {
    var strline1 = lines[0].trim();
    var strline2 = lines[1].trim();

    //カウント対象の文字列で元の文字列を分割して配列に変換。
    var check = strline1.split(strline2);
    console.log(check.length - 1);
});

 .split()で文字列2で文字列1を分割して配列に入れ、その配列の要素数-1で、文字列1中に含まれる文字列2の個数をカウントできます。文字列2は複数文字でもOK。

PHP
<?php
// Your code here!
$line1 = trim(fgets(STDIN));
$line2 = trim(fgets(STDIN));

//1バイト文字の場合
echo substr_count($line1,$line2);

//2バイト以上の文字の場合
echo mb_substr_count($line1,$line2);
?>

 .substr_count()で、文字列1に含まれる文字列2の個数をカウントできます。文字列2は複数文字でもOK。

 2バイト以上の文字を扱う場合は、.mb_substr_count()を使用します。

Python3
line1 = input().rstrip()
line2 = input().rstrip()

print(line1.count(line2))

 .count()で、文字列1に含まれる文字列2の個数をカウントできます。文字列2は複数文字でもOK。

Ruby
line1 = gets.chomp
line2 = gets.chomp

#対象が1文字
puts line1.count(line2)

#対象が複数文字
puts line1.scan(line2).length

 文字列2が1文字の場合は、.count()で文字列1に含まれる文字列2の個数をカウントできます。

 文字列2が複数文字の場合は、.count()では正常にカウントできないです。この場合は、.scan()で文字列2を配列に入れ、その配列の要素数をカウントすることで、文字列1中に含まれる文字列2の個数をカウントします。

にほんブログ村 ゲームブログへ

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする