- トップページ
- 特集PC技術
- Pythonを学ぼう
- 第19回 文字列の操作
Pythonを学ぼう
第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()); } } |
コメント
匿名
勉強で利用させてもらってます。説明が逆になってました。
↓
findとindexは文字列の右端から検索するのに対し、rfindとrindexは文字列の左端から検索します。
2012年7月29日 21:34
ほぷしぃ管理人
ご利用いただきありがとうございます。
指摘箇所について修正をいたしました。
今後ともよろしくお願いします。
2012年8月 8日 08:59
コメントの投稿
トラックバックURL
http://www.isl.ne.jp/cgi-bin/mt/mt-tb.cgi/1777