2010-01-01から1ヶ月間の記事一覧

文字列を比較する

Javaの場合、==とequals()は別の意味を持つ。 ==は同じオブジェクトを参照しているかを評価し、 equals()は、同じ内容の文字列であるかどうかを評価する。 public class StringCompare{ public static void main(String args[]){ String s1 = "abc"; String …

文字の出現頻度を調べる

1つの文字列に特定の文字の出現頻度を調べます。 例として、円周率における出現頻度を扱います def char_stat(str){ table = [:] m = (~/(?m)./).matcher(str) m.find() m.each { word -> table[word] = table.get(word,0) + 1 } list = table.keySet().toLi…

特定の文字・文字列の出現回数を調べる

文字の出現回数を調べる "a\n\nccc\nd\n".count("\n") ===> 4 マルチバイト文字の出現回数を調べる マルチバイト文字もcountメソッドで調れべられます。 "あああいいううええお".count("あ") ===> 3 文字列の出現回数を調べる 文字列も、countメソッドで調べ…

前回マッチした部分の続きからマッチさせる

groovy:000> m1 = (~/\w+/).matcher("abc def ghi jkl") ===> java.util.regex.Matcher[pattern=\w+ region=0,15 lastmatch=] groovy:000> m1.find() ===> true groovy:000> m1[0] ===> abc groovy:000> m1[1] ===> def groovy:000> m1[2] ===> ghi groovy:0…

正規表現「.」に\nをマッチさせる

これ正規表現が文字列の先頭・末尾にマッチするか調べる (マルチラインモード含む)で先に調べたわ。。。 groovy:000> "\n".find(~/./) ===> null groovy:000> "\n".find(~/(?m)./) ===> null groovy:000> "\n".find(~/(?s)./) ===> ↑(?m)じゃなくて(?s)を設…

単語にマッチさせる

単語を含むかどうか調べる 「spec」を検索したいが「specfification」はマッチして欲しく ないようなこと。 境界正規表現エンジンの単語境界の「\b」を使用する groovy:000> "Java spec".find(/\bspec\b/) ===> spec groovy:000> "Java specification".find(…

正規表現が文字列の先頭・末尾にマッチするか調べる (マルチラインモード含む)

twitterとid:uehajからコメントをもらったもう一度。 http://java.sun.com/javase/ja/6/docs/ja/api/java/util/regex/Pattern.html#MULTILINE行末記号の説明 デフォルトでは、正規表現 ^ および $ は行末記号を無視し、入力シーケンス全体の それぞれ先頭と…

正規表現が文字列の先頭・末尾にマッチするか調べる

Javaの正規表現ではRubyと同じく文字列先頭を「\A」、文字列末尾を「\z」 (小文字のzであることに注意)で表現できます。 それを確認するつもりが確認できなかった。。。。 ソースと結果 文字列先頭が「a」 (~/\Aa/).matcher("aiueo").find() ===> true 文字…

文字列を検索する

実行環境 OS:Windows XP Groovy Version: 1.6.5 JVM: 1.6.0_12 ソースと結果 パターンが含まれるかどうかを調べる ソース println "パターンが含まれるかどうかを調べる" ("a c"=~/[ \t]/).find() ("abc"=~/[ \t]/).find() (~/[ \t]/).matcher("a c").find()…

文字列の長さを得る

日本語のようなマルチバイト文字列の場合、バイト数か文字数によって結果が異なる コード系によってさらに違うから面倒だ。 ソース println "This is a String".length() println "This is a String".size() println "This is a String".getBytes().size() p…

文字列を反復する

文字列を反復した文字列を作るには * 演算子を使う ソース print "foo" * 5 実行環境 OS:Windows XP Groovy Version: 1.6.5 JVM: 1.6.0_12 結果 groovy:000> print "foo" * 5 foofoofoofoofoo===> null ↑*5で5回繰り返す。うんわかりやすいね。 groovy:000> …

文字列を複製する

文字列を複製するには、代入するか、新しくStringオブジェクトを作る StringクラスはCloneable インタフェースを未サポートclone()は使えない。なんでだっけ? ソース str1 = "This is a String" str2 = new String(str1) str1.hashCode() str2.hashCode() s…

文字コードを推測する

文字列の文字コードを推測するには、Mozilla のエンコーディング判別ライブラリ universalchardetのJava版を使う。 ソース import org.mozilla.universalchardet.UniversalDetector; def String getCodeName(fileName) { f = new File(fileName) fis = new F…

文字コードを変換する

groovy(java)だとJavaVM上の文字列はUTF-8で扱われる。 String→byte→StrginにしてしまったらUTF-8になってしまう。 byteを表示してもいいんだけど、あまりうれしくない。groovyだとFiel#write(String string, String charset) というメソッドが あるのでこれ…

デフォルトの文字コードを設定する

Windowsでも、他のプラットフォームからファイルを持ってくれば 文字コードがEUC-JP、Shift_JIS、UTF-8だったりすることはあるわけで そんな場合は、文字コードを設定して実行したい。 ソース CharcterCodeSJIS.groovy Shift_JISで書かれたファイル 内容 pri…

謹賀新年

デザイン年賀状よりあけまして おめでとうございます 今年はますます iPhoneから世の中を見る機会が増えそうだ 今年は 平穏な年であることを望みます 何事もなければ それでいいです