さらに先へ · 19
文字列の操作
切り出し、検索、置換、前後の空白除去、比較、桁そろえ。
入力を受け取ったら、まず整え(前後の空白を取る)、必要な部分を探して切り出し、形を変えて出力することがよくあります。
下の例はその道具を順に使います。
text = input().strip()date = input()a, b = input().split()n = input().strip()print(f"[{text}]")print(text[:5])i = text.find("World")print(i)print(text[i:i + 5])print(text.find("Bye"))print(date.replace("-", "/"))print((a > b) - (a < b))print(n.rjust(3, "0"))const lines = require("fs").readFileSync(0, "utf8").split("\n");const text = lines[0].trim();const date = lines[1].trim();const [a, b] = lines[2].trim().split(" ");const n = lines[3].trim();console.log(`[${text}]`);console.log(text.slice(0, 5));const i = 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"));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"));import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String text = sc.nextLine().strip(); String date = sc.nextLine().strip(); String[] ab = sc.nextLine().strip().split(" "); String n = sc.nextLine().strip(); System.out.println("[" + text + "]"); System.out.println(text.substring(0, 5)); int i = text.indexOf("World"); System.out.println(i); System.out.println(text.substring(i, i + 5)); System.out.println(text.indexOf("Bye")); System.out.println(date.replace("-", "/")); System.out.println(Integer.signum(ab[0].compareTo(ab[1]))); System.out.println("0".repeat(Math.max(0, 3 - n.length())) + n); }}using System; class Program{ static void Main() { string text = Console.ReadLine().Trim(); string date = Console.ReadLine().Trim(); string[] ab = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries); string n = Console.ReadLine().Trim(); Console.WriteLine($"[{text}]"); Console.WriteLine(text.Substring(0, 5)); int i = text.IndexOf("World", StringComparison.Ordinal); Console.WriteLine(i); Console.WriteLine(text.Substring(i, 5)); Console.WriteLine(text.IndexOf("Bye", StringComparison.Ordinal)); Console.WriteLine(date.Replace("-", "/")); Console.WriteLine(Math.Sign(string.CompareOrdinal(ab[0], ab[1]))); Console.WriteLine(n.PadLeft(3, '0')); }}#include <iomanip>#include <iostream>#include <string> std::string trim(const std::string& s) { size_t start = s.find_first_not_of(" \t\r\n"); if (start == std::string::npos) return ""; size_t end = s.find_last_not_of(" \t\r\n"); return s.substr(start, end - start + 1);} int main() { std::string text, date, a, b, n; std::getline(std::cin, text); std::getline(std::cin, date); std::cin >> a >> b >> n; text = trim(text); date = trim(date); std::cout << '[' << text << "]\n"; std::cout << text.substr(0, 5) << '\n'; size_t i = text.find("World"); std::cout << i << '\n'; std::cout << text.substr(i, 5) << '\n'; size_t miss = text.find("Bye"); std::cout << (miss == std::string::npos ? -1 : (long)miss) << '\n'; for (size_t p; (p = date.find('-')) != std::string::npos;) date.replace(p, 1, "/"); std::cout << date << '\n'; int c = a.compare(b); std::cout << (c > 0) - (c < 0) << '\n'; std::cout << std::setw(3) << std::setfill('0') << n << '\n';}#include <ctype.h>#include <stdio.h>#include <string.h> char *trim(char *s) { while (isspace((unsigned char)*s)) s++; char *end = s + strlen(s); while (end > s && isspace((unsigned char)end[-1])) *--end = '\0'; return s;} int main(void) { char line[1024], date[64], a[64], b[64]; int n; fgets(line, sizeof line, stdin); scanf("%63s %63s %63s %d", date, a, b, &n); char *text = trim(line); printf("[%s]\n", text); printf("%.5s\n", text); char *found = strstr(text, "World"); int i = found ? (int)(found - text) : -1; printf("%d\n", i); printf("%.5s\n", text + i); printf("%d\n", strstr(text, "Bye") ? (int)(strstr(text, "Bye") - text) : -1); for (char *p = date; *p; p++) if (*p == '-') *p = '/'; printf("%s\n", date); int c = strcmp(a, b); printf("%d\n", (c > 0) - (c < 0)); printf("%03d\n", n); return 0;}text = コンソール.行読み().空白除去();date = コンソール.行読み().空白除去();ab = コンソール.行読み().分ける();n = コンソール.行読み().空白除去();コンソール.書く("[" + text + "]");コンソール.書く(text.切り出す(0, 5));i = text.位置検索("World");コンソール.書く(i);コンソール.書く(text.切り出す(i, 5));コンソール.書く(text.位置検索("Bye"));コンソール.書く(date.置き換え("-", "/"));もし (ab[0] < ab[1]){ コンソール.書く(-1);}でなければ もし (ab[0] > ab[1]){ コンソール.書く(1);}でなければ{ コンソール.書く(0);}コンソール.書く(n.前埋め(3, "0"));Hello, World 2026-11-10 pear apple 7
[Hello, World] Hello 7 World -1 2026/11/10 1 007
ポイント
- 整えるとは前後の空白を取ることです。
読んだ行は整えてから使うのが安全です。 - 検索は最初に見つかった位置を返します。
見つからないときはたいてい -1 ですが、言語によって違います。 - 切り出しは二つ目の数の意味が言語ごとに違います。
終わりの位置(その位置は含まない)の言語と、文字数の言語があります。 - 置換はたいていすべて置き換えますが、JavaScript の
replaceは最初の一つだけです。 - 比較は負・0・正を返します。
信じてよいのは符号だけで、値の大きさに意味はありません。 - 桁そろえは
7を007のように前を埋めて幅をそろえます。
言語ごとの書き方
| Python | strip()、find(なければ -1、index はエラー)、t[7:12](終わりの位置)、replace(すべて)、rjust(3, "0") |
|---|---|
| JavaScript | trim()、indexOf、slice(7, 12)(終わりの位置)、replace は最初の一つだけ・replaceAll はすべて、padStart(3, "0")。localeCompare は言語設定に従います |
| TypeScript | JavaScript と同じです |
| Java | strip()、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") |
よくある間違い
compareTo が 1 を返すと思ったJava · C · C++ · C#
System.out.println("pear".compareTo("apple"));→ 15 — 'p' - 'a' です
> 0、< 0 のように符号だけを見ます。
切り出しの二つ目の数を取り違えたC# · Java · JavaScript
"Hello, World".Substring(7, 12) // C#
"Hello, World".substring(7, 5) // Java, JavaScript→ C# は範囲外エラー、Java もエラー。JavaScript は二つの数をこっそり入れ替えて ", " を返します
その言語で二つ目の数が終わりの位置か文字数か、先に確かめます。
replace ですべて置き換わると思ったJavaScript · TypeScript
console.log("2026-11-10".replace("-", "/"));→ 2026/11-10 — 最初の一つだけが変わります
すべてなら replaceAll。
Java の replaceAll は正規表現なので "a.b".replaceAll(".", "-") が "---" になる点にも注意します。
言語ごとの違い
Windows で作った入力は行末が
Java
読んだ行は整えてから使いましょう。
Windows で作った入力は行末が
\r\n です。Java
nextLine()・C# ReadLine()・Craykon 行読み() は \r まで取りますが、Python input()(Linux・macOS 上)・JavaScript split("\n")・C fgets・C++ getline は残すので "World\r" == "World" が偽になります。読んだ行は整えてから使いましょう。