Pythonを学ぼう 第19回 文字列の操作 - ほぷしぃ

第19回 文字列の操作


1.文字列の読み込み

文字列の各要素は、次の構文を使用して読み込みます。

文字列[インデックス]


使用方法は次のプログラムを見てください。

# coding: utf-8

a = 'str'


# インデックス1を読み込む
print(a[1])

# 存在しないインデックス3を読み込む


print(a[3])

実行結果

t
Traceback (most recent call last):

IndexError: string index out of range

実行結果より、指定したインデックスの文字を読み込むことができます。
ただし、存在しないインデックスを読み込もうとすると、エラーになります。

2.文字列の連結

「+」演算子を使用すると、文字列を連結できます。
使用方法は次のプログラムを見てください。

# coding: utf-8

# 文字列の連結


print('abc' + 'def')

実行結果

abcdef

3.文字列の分割

次の構文を使用すると、文字列を分割できます。

.split(区切り文字, 分割数)
.rsplit(区切り文字, 分割数)


指定の文字列に対して、区切り文字で分割したリストを返します。
分割数はオプションで、分割する回数を制限できます。
splitは左から分割し、rsplitは右から分割するという違いがあります。
使用方法は次のプログラムを見てください。

# coding: utf-8

a = 'abcabc'


# splitで分割
print(a.split('b'))
print(a.split('b', 1))

# rsplitで分割


print(a.rsplit('b'))
print(a.rsplit('b', 1))

実行結果

['a', 'ca', 'c']
['a', 'cabc']
['a', 'ca', 'c']
['abca', 'c']

4.文字列の削除

次の構文を使用すると、文字列から特定の文字を削除できます。

.strip(削除する文字列)
.lstrip(削除する文字列)
.rstrip(削除する文字列)


stripは両端、lstripは左端、rstripは右端の文字列を削除します。
厳密にいうと、文字列は変更不可能なオブジェクトなので、
削除ではなく、特定の文字を取り除いた新しい文字列を返す処理となります。
使用方法は次のプログラムを見てください。

# coding: utf-8

a = 'abcabca'


# stripで両端の削除
print(a.strip('a'))

# lstripで左端の削除


print(a.lstrip('a'))

# rstripで右端の削除


print(a.rstrip('a'))

# 削除する文字列を指定しない場合は、空白を削除


print(' abc '.strip())

実行結果

bcabc
bcabca
abcabc
abc

5.文字列の検索

5.1.指定の文字列を調べる

次の構文を使用すると、指定の文字列が含まれているかを調べることができます。

検索する文字列 in 検索対象の文字列


検索対象の文字列の中に、検索する文字列が存在していれば、Trueになり、そうでなければ、Falseとなります。
使用方法は次のプログラムを見てください。

# coding: utf-8

a = 'abcabc'


# 検索する文字列が存在する場合
print('bca' in a)

# 検索する文字列が存在しない場合


print('abcd' in a)

実行結果

True
False

5.2.開始文字・終了文字を調べる

次の構文を使用すると、開始文字・終了文字を調べることができます。

.startswith(検索する文字列, 開始位置, 終了位置)
.endswith(検索する文字列, 開始位置, 終了位置)


startswithは文字列の先頭を調べるのに対し、endswithは文字列の末尾を調べます。
検索する文字列が存在していれば、Trueになり、そうでなければ、Falseとなります。
開始位置と終了位置はオプションで、検索位置を指定することができます。
使用方法は次のプログラムを見てください。

# coding: utf-8

a = 'abcabc'


# startswithで先頭の文字列を検索
print(a.startswith('a'))
print(a.startswith('c'))
print(a.startswith('a', 1))

# endswithで末尾の文字列を検索


print(a.endswith('a'))
print(a.endswith('c'))
print(a.endswith('a', 0, 4))

実行結果

True
False
False
False
True
True

5.3.検索した文字列のインデックスを調べる

次の構文を使用すると、検索した文字列のインデックスを調べることができます。

.find(検索する文字列, 開始位置, 終了位置)
.rfind(検索する文字列, 開始位置, 終了位置)
.index(検索する文字列, 開始位置, 終了位置)
.rindex(検索する文字列, 開始位置, 終了位置)


findとindexは文字列の左端から検索するのに対し、rfindとrindexは文字列の右端から検索します。
開始位置と終了位置はオプションで、検索範囲を指定することができます。
find(またはrfind)とindex(またはrindex)の違いは、検索する文字列が見つからない場合、
前者は-1となりますが、後者はエラーとなります。
使用方法は次のプログラムを見てください。

# coding: utf-8

a = 'abcabc'


# findで検索 print(a.find('a'))
print(a.find('a', 1))

# rfindで検索


print(a.rfind('a'))
print(a.rfind('a', 0, 1))

# indexで検索


print(a.index('a'))
print(a.index('a', 1))

# rindexで検索


print(a.rindex('a'))
print(a.rindex('a', 0, 1))

# findとindexで検索した文字列が見つからない場合


print(a.find('d'))
print(a.index('d'))

実行結果

0
3
3
0
0
3
3
0
-1
Traceback (most recent call last):

ValueError: substring not found

6.文字列の置換

次の構文を使用すると、指定の文字列を置換することができます。

.replace(置換される文字列, 置換する文字列, 置換回数)


置換回数はオプションで、置換する回数を指定できます。
置換回数を指定しない場合は、全て置換されます。
使用方法は次のプログラムを見てください。

# coding: utf-8

a = 'abcabc'


# 指定文字列を置換する
print(a.replace('abc', 'X'))

# 置換回数を1回にして指定文字列を置換する


print(a.replace('abc', 'X', 1))

実行結果

XX
Xabc

7.その他の文字列の操作

他にさまざまな文字列の操作があります。
その一例として、次の構文があります。

len(文字列)
.upper()
.lower()


使用方法は次のプログラムを見てください。

# coding: utf-8

# 文字列の長さを調べる


print(len('abc'))

# 小文字を大文字に変換する


print('abc'.upper())

# 大文字を小文字に変換する


print('ABC'.lower())

実行結果

3
ABC
abc

8.Javaとの比較

Javaのソースコードとの比較をします。
文字列はJavaにはStringクラスがあるため、
このクラスとの比較をします。
Javaを知っている方は参考にしてください。

Python Java
# coding: utf-8

# インデックス1を読み込む


print('abc'[1])

# 文字列の連結


print('abc' + 'def')

# 文字列の分割


print('abcabc'.split('b'))

# 両端の削除


print('abcabca'.strip('a'))

# 検索する文字列が存在するかを検索


print('bca' in 'abcabc')

# 先頭の文字列を検索


print('abcabc'.startswith('a'))

# 末尾の文字列を検索


print('abcabc'.endswith('a'))

# 検索する文字列のインデックスを調べる


print('abcabc'.find('a'))

# 検索する文字列のインデックスを調べる(末尾)


print('abcabc'.rfind('a'))

# 指定文字列を置換する


print('abcabc'.replace('abc', 'X'))

# 文字列の長さを調べる


print(len('abc'))

# 小文字を大文字に変換する


print('abc'.upper())

# 大文字を小文字に変換する


print('ABC'.lower())
public class Java19 {
    public static void main(String[] args) {
        // インデックス1を読み込む
        System.out.println("abc".substring(1, 2));

        // 文字列の連結


        System.out.println("abc" + "def");

        // 文字列の分割


        String[] strs = "abcabc".split("b");
        for (int i = 0; i < strs.length; i++) {
            System.out.print(strs[i]);
            System.out.print(" ");
        }
        System.out.println();

        // 両端の削除


        // 適当なメソッドが見つからない

        // 検索する文字列が存在するかを検索


        // indexOfの戻り値で判断する以外、適当なメソッドが見つからない

        // 先頭の文字列を検索


        System.out.println("abcabc".startsWith("a"));

        // 末尾の文字列を検索


        // 適当なメソッドが見つからない

        // 検索する文字列のインデックスを調べる


        System.out.println("abcabc".indexOf("a"));

        // 検索する文字列のインデックスを調べる(末尾)


        System.out.println("abcabc".lastIndexOf("a"));

        // 指定文字列を置換する


        System.out.println("abcabc".replace("abc", "X"));

        // 文字列の長さを調べる


        System.out.println("abc".length());

        // 小文字を大文字に変換する


        System.out.println("abc".toUpperCase());

        // 大文字を小文字に変換する


        System.out.println("ABC".toLowerCase());
    }
}