{ }codelper

学ぶ › TypeScript

さらに先へ · 19

文字列の操作

切り出し、検索、置換、前後の空白除去、比較、桁そろえ。

入力を受け取ったら、まず整え(前後の空白を取る)、必要な部分を探して切り出し、形を変えて出力することがよくあります。
下の例はその道具を順に使います。

import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");const text: string = lines[0].trim();const date: string = lines[1].trim();const [a, b]: string[] = lines[2].trim().split(" ");const n: string = lines[3].trim();console.log(`[${text}]`);console.log(text.slice(0, 5));const i: number = text.indexOf("World");console.log(i);console.log(text.slice(i, i + 5));console.log(text.indexOf("Bye"));console.log(date.replaceAll("-", "/"));console.log(a < b ? -1 : a > b ? 1 : 0);console.log(n.padStart(3, "0"));
stdin
   Hello, World   
2026-11-10
pear apple
7
stdout
[Hello, World]
Hello
7
World
-1
2026/11/10
1
007

ポイント

  • 整えるとは前後の空白を取ることです。
    読んだ行は整えてから使うのが安全です。
  • 検索は最初に見つかった位置を返します。
    見つからないときはたいてい -1 ですが、言語によって違います。
  • 切り出しは二つ目の数の意味が言語ごとに違います。
    終わりの位置(その位置は含まない)の言語と、文字数の言語があります。
  • 置換はたいていすべて置き換えますが、JavaScript の replace は最初の一つだけです。
  • 比較は負・0・正を返します。
    信じてよいのは符号だけで、値の大きさに意味はありません。
  • 桁そろえは 7 を 007 のように前を埋めて幅をそろえます。

言語ごとの書き方

Pythonstrip()、find(なければ -1、index はエラー)、t[7:12](終わりの位置)、replace(すべて)、rjust(3, "0")
JavaScripttrim()、indexOf、slice(7, 12)(終わりの位置)、replace は最初の一つだけ・replaceAll はすべて、padStart(3, "0")。
localeCompare は言語設定に従います
TypeScriptJavaScript と同じです
Javastrip()、indexOf、substring(7, 12)(終わりの位置)、replace(すべて、replaceAll は正規表現)、compareTo(符号だけを信じる)
C#Trim()、IndexOf、Substring(7, 5)(文字数)、Replace(すべて)、PadLeft(3, '0')。
string.Compare と IndexOf(string) はカルチャに従うので、文字コードのまま比べるなら StringComparison.Ordinal か string.CompareOrdinal
C++整える関数がないので自分で切ります。
find(なければ std::string::npos)、substr(7, 5)(文字数)、compare。
全置換はループで。
桁そろえは setw と setfill
C整える・全置換がないので自分で書きます。
strstr(なければ NULL)、切り出しは printf("%.5s", text + 7)(開始アドレスと文字数)、比較は strcmp、桁そろえは printf("%03d")
Craykon空白除去()、位置検索(なければ -1)、切り出す(7, 5)(文字数)、置き換え(すべて)、前埋め(3, "0")

よくある間違い

replace ですべて置き換わると思ったJavaScript · TypeScript

console.log("2026-11-10".replace("-", "/"));

→ 2026/11-10 — 最初の一つだけが変わります

すべてなら replaceAll。
Java の replaceAll は正規表現なので "a.b".replaceAll(".", "-") が "---" になる点にも注意します。

切り出しの二つ目の数を取り違えたC# · Java · JavaScript

"Hello, World".Substring(7, 12)  // C#
"Hello, World".substring(7, 5)   // Java, JavaScript

→ C# は範囲外エラー、Java もエラー。JavaScript は二つの数をこっそり入れ替えて ", " を返します

その言語で二つ目の数が終わりの位置か文字数か、先に確かめます。

compareTo が 1 を返すと思ったJava · C · C++ · C#

System.out.println("pear".compareTo("apple"));

→ 15 — 'p' - 'a' です

> 0、< 0 のように符号だけを見ます。

言語ごとの違い
Windows で作った入力は行末が \r\n です。
Java nextLine()・C# ReadLine()・Craykon 行読み() は \r まで取りますが、Python input()(Linux・macOS 上)・JavaScript split("\n")・C fgets・C++ getline は残すので "World\r" == "World" が偽になります。
読んだ行は整えてから使いましょう。

練習問題