文字列中の指定された位置から文字を取り出す処理。文字列を扱う上での基本であり、演習問題などで定番になっています。
今回は、標準入力された文字列と先頭から〇番目を指定する数値を使い、文字列の指定された場所から文字を1つ取り出す処理について、C#、Java、JavaScript、PHP、Python3、Rubyの6言語で書いてみました。
C#
using System;
public class Hello{
public static void Main(){
string str = Console.ReadLine().Trim();
int n = int.Parse(Console.ReadLine());
Console.WriteLine(str[n-1]);
Console.WriteLine(str.Substring(n-1,1));
}
}
文字列[n-1]もしくは、文字列.Substring(n-1,1)で、先頭からn番目(文字列の位置は0から始まるので-1する)の文字を1つ取り出せます。
Substring(a,b)は、aが開始位置、bが取り出す文字数となっています。
Java
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Scanner scan = new Scanner(System.in);
String str = scan.next();
int n = scan.nextInt();
System.out.println(str.charAt(n-1));
System.out.println(str.substring(n-1,n));
}
}
文字列.charAt(n-1)もしくは、文字列.substring(n-1,n)で、先頭からn番目(文字列の位置は0から始まるので-1する)の文字を1つ取り出せます。
substring(a,b)は、aが開始位置、bが終了位置となっており、aの位置からaとbの差分の文字数を取り出せます。
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 str = lines[0];
var n = parseInt(lines[1]);
console.log(str[n-1]);
console.log(str.charAt(n-1));
console.log(str.slice(n-1,n));
});
文字列[n-1]もしくは、文字列.charAt(n-1)、文字列.slice(n-1,n)で、先頭からn番目(文字列の位置は0から始まるので-1する)の文字を1つ取り出せます。
slice(a,b)は、aが開始位置、bが終了位置となっており、aの位置からaとbの差分の文字数を取り出せます。
PHP
<?php
$str = trim(fgets(STDIN));
$n = (int)trim(fgets(STDIN));
echo $str[$n-1]."\n";
echo substr($str,$n-1,1)."\n";
echo mb_substr($str,$n-1,1)."\n";
?>
文字列[n-1]もしくは、substr(文字列,$n-1,1)、mb_substr(文字列,$n-1,1)で、先頭からn番目(文字列の位置は0から始まるので-1する)の文字を1つ取り出せます。
substr(文字列,a,b)、mb_substr(文字列,a,b)は、aが開始位置、bが終了位置となっており、aの位置からaとbの差分の文字数を取り出せます。
扱う文字列が2バイトの場合は、mb_substr(文字列,a,b)を使用。文字列[n-1]、substr(文字列,$n-1,1)で2バイト文字を扱うと、文字化けして正常に表示されないです。
Python3
str = input().rstrip()
n = int(input().rstrip())
print(str[n-1])
文字列[n-1]、先頭からn番目(文字列の位置は0から始まるので-1する)の文字を1つ取り出せます。
Ruby
str = gets.chomp
n = gets.chomp.to_i
puts str[n-1]
puts str.slice(n-1,1)
文字列[n-1]もしくは、文字列.slice(n-1,1)で、先頭からn番目(文字列の位置は0から始まるので-1する)の文字を1つ取り出せます。
slice(a,b)は、aが開始位置、bが取り出す文字数となっています。
文字列の指定された位置から文字を1文字取り出す処理を振り返ると、今回扱った6言語のうち、Javaを除いた5言語(C#、JavaScript、PHP、Python3、Ruby)では、文字列[a]とすることで、aの位置の文字を1文字取り出すことが可能になってました。