const greeting = "ようこそ。コーディングエブリバディです。";

/*
 * 注意してください!
 * 文字列におけるインデックスは0から始まります。
 * 最初の文字のインデックスは0で、2番目の文字のインデックスは1です。
*/

// 文字列greetingから文字列「ようこそ。」を検索し、
// 最初に見つかった(出現した)文字列(「よ」)のインデックスを返します。
const hello = greeting.indexOf("ようこそ。");
console.log(hello); // 出力:0

// 文字列greeting内に引数として渡された文字列「はじめまして。」が存在しないため、
// -1を返します。
const niceToMeetYou = greeting.indexOf("はじめまして。");
console.log(niceToMeetYou); // 出力:-1

const coding = greeting.indexOf("コーディング", 5);
// 第2引数は検索を開始するインデックスを指定します。
// この引数はオプションであり、省略した場合は先頭(0)から検索されます。
// インデックスは常に左端から右方向にカウントされます。
// 引数の値が5であるため、6番目の位置から検索を開始すると文字列「コーディング」が見つかり、
// 左端(インデックス0)から数えた文字列「コ」のインデックスは7になります。

console.log(coding); // 出力:7
str.indexOf(searchValue[, fromIndex])
/*
 * 引数として渡された文字列が、indexOf()関数を適用する文字列内に重複して存在する場合、
 * 最初に見つかった(出現した)文字列のインデックスを返します。
*/
const str = "色は赤、青、青、黄色です。";

// 文字列strから文字列「青」を検索し、最初に見つかった(出現した)文字列のインデックスを返します。
const val_1 = str.indexOf("青");

// 文字列str内には、検索対象の文字列「青」が2つ存在します。
// インデックス8と12に存在します。
// しかし、最初に見つかった検索対象文字列のインデックスである8を返します。
console.log(val_1); // 出力:8

// 文字列str内に引数として渡された文字列「緑」が存在しないため、-1を返します。
const val_2 = str.indexOf("緑");
console.log(val_2); // 出力:-1

const val_3 = str.indexOf("は", 1);
// 第2引数は検索を開始するインデックスを指定します。
// この引数はオプションであり、省略した場合は先頭(0)から検索されます。
// 引数の値が1であるため、2番目の位置から検索すると検索対象の文字列「は」が見つかり、
// 左端(インデックス0)から数えた文字列「は」のインデックスは2になります。

console.log(val_3); // 出力:2

//////////////////////////////////////////
const undefinedStr = "値が代入されていない変数の値はundefinedと呼ばれます。";
const val_4 = undefinedStr.indexOf();

// 第1引数に何も値が指定されていない場合、
// 文字列「undefined」を検索対象の文字列として使用します。
// 「undefined」のインデックスである18を返します。
console.log(val_4); // 出力:18
const redString = "red";
const searchRed = redString.indexOf("Red");

// 大文字の「R」と小文字の「r」は区別されます。
console.log(searchRed); // 出力:-1
const str = "Hello, world!";

if (str.indexOf("world") !== -1) {
    console.log("部分文字列が存在します。");
} else {
    console.log("部分文字列は存在しません。");
}

// 出力:「部分文字列が存在します。」
const str = "Hello, World!";
const searchStr = "world";

if (str.toLowerCase().indexOf(searchStr.toLowerCase()) !== -1) {
    console.log("大文字と小文字に関係なく部分文字列が存在します。");
}

// 出力:「大文字と小文字に関係なく部分文字列が存在します。」
// 与えられた文字列
const str = "Hello, world! Hello, universe!";

// 検索したい部分文字列
const searchStr = "Hello";

let count = 0;

// 文字列内で最初の出現位置を検索
let idx = str.indexOf(searchStr);

// 出現位置が見つからなくなるまで繰り返す
while (idx !== -1) {
    // 出現回数を加算
    count++;

    // 次の出現位置を検索するため、直前の出現位置の次から再検索
    idx = str.indexOf(searchStr, idx + 1);
}

// 検索対象の文字列の出現回数を出力
console.log("検索対象の文字列の出現回数:", count);
// 出力:検索対象の文字列の出現回数: 2