部分文字列を検索するには (indexOf, lastIndexOf) 2015/02/16
文字列の中から特定の部分文字列を検索する方法。
Go言語 (golang) 2015/02/16
stringsパッケージのIndex関数またはLastIndex関数を使う。
Index関数は前から検索し、LastIndex関数は後ろから検索する。
いずれも見つからない場合は -1 を返す。
package main
import "fmt"
import "strings"
func main() {
str := "abcabc!"
fmt.Printf("%d\n", strings.Index(str, "bc"))
// => 1
fmt.Printf("%d\n", strings.LastIndex(str, "bc"))
// => 4
}
Java / Scala / Groovy 2015/04/21
StringクラスのindexOfメソッドまたはlastIndexOfメソッドを使う。
indexOfメソッドは前から検索し、lastIndexOfメソッドは後ろから検索する。
いずれも見つからない場合は -1 を返す。
Signature:
int java.lang.String#indexOf(int ch)int java.lang.String#indexOf(int ch, int fromIndex)int java.lang.String#indexOf(String str)int java.lang.String#indexOf(String str, int fromIndex)int java.lang.String#lastIndexOf(int ch)int java.lang.String#lastIndexOf(int ch, int fromIndex)int java.lang.String#lastIndexOf(String str)int java.lang.String#lastIndexOf(String str, int fromIndex)
lastIndexOf で fromIndex を指定すると、そのインデックスより前を走査する。
Groovyでの例
def p = "abcabc".indexOf("bc") // => 1
PHP 2015/10/16
strpos関数を使う。
strpos($mystring, $str)
例:
strpos('abcabc', 'bc') // => 1
見つかった場所をインデックスで返す。文字列の先頭で見つかった場合は 0 を返す。見つからない場合は FALSE を返す。
0 も FALSE の扱いになるため、以下のようにすると、見つかった場合という条件ではなく、先頭以外で見つかった場合という条件になってしまうので注意。
if (strpos($str, $findme))
以下のようにすれば、見つかった場合という条件になる。
if (strpos($str, $findme) !== FALSE)
PHPでは文字列と数値がしばしば勝手に変換されるので型の意識が薄れがちだが、 2つ目の引数がたまたま数値になってしまっていたりすると意図したとおりには動かない。
var_export(strpos("123", "2")); // => 1
var_export(strpos("123", 2)); // => false
var_export(strpos(123, "2")); // => 1
var_export(strpos(123, 2)); // => false
strpos 関数 | PHP Manual
http://php.net/manual/ja/function.strpos.php
Python 2013/10/21
str = "abcabc"
print str.find("bc")
# => 1
print str.find("bc", 1)
# => 1
print str.find("bc", 2)
# => 4
Ruby 2014/11/03
String#index(str)
String#index(str, index)
String#rindex(str)
String#rindex(str, index)
見つからない場合は nil を返す。2つ目の引数を与えると index はその位置以降を探し、
rindex はその位置以前を探す。
'abcabc'.index('abc') # => 0
'abcabc'.index('abc', 1) # => 3
'abcabc'.index('abc', 3) # => 3
'abcabc'.index('abc', 4) # => nil
'abcabc'.rindex('abc') # => 3
'abcabc'.rindex('abc', 3) # => 3
'abcabc'.rindex('abc', 2) # => 0
Unicodeの拡張領域にも対応している。
"\u{5730 7403 1F30E 1F30D}".index("\u{1F30D}") # => 3
String#index | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/class/String.html#I_INDEX
String#rindex | Ruby 2.1 リファレンスマニュアル
http://docs.ruby-lang.org/ja/2.1.0/class/String.html#I_RINDEX
Perl 2013/10/17
my $str = "abcabc";
print index($str, 'abc') . "\n"; # => 0
print index($str, 'abc', 1) . "\n"; # => 3
print index($str, 'abc', 3) . "\n"; # => 3
print index($str, 'abc', 4) . "\n"; # => -1
index 関数 | perldoc.jp
http://perldoc.jp/func/index
JavaScript / CoffeeScript 2013/09/07
string.indexOf(str)
string.lastIndexOf(str)
見つからなかった場合は -1 を返す。