Stringの結合を繰り返す

ここ最近は、JavaのStringインスタンスを切ってはつなげるコードをひたすら書いてます。1回書いて、見事に失敗。もう1回作り直しているところです。それにしても、これって簡単に書く方法ってないんですかね。


やっぱりパーザもどきを作ろうと思ったら、String→char[]に変換して、ひたすら置換するくらいしかないんだろうか。毎回Stringクラスのsubstringメソッドを呼び出して結合するなんてことをしてたら、かなり面倒だし。いい方法を模索中です。

トラックバック(0)

このブログ記事を参照しているブログ一覧: Stringの結合を繰り返す

このブログ記事に対するトラックバックURL: http://trialpc.net/mt/mt-tb.cgi/1255

コメント(5)

ぜん :

やりたい事をもう少し詳しく書いてもらえるとありがたいのですが…。
どんな事をするにしろ、char[]だけは使わない方がいいと思います。


tetsu :

ある英単語をすべて原形(もしくはそれに準ずる形)に
変換するってことをしてます。たとえば、進行形や過去形を
原形に直すとか、そんな感じです。

char[]を使うとどのあたりが問題になるんですか?


ぜん :

それはけっこう面倒ですね…。文字列の置換なので、正規表現が使えるString#replaceFirstが割と楽なのではないでしょうか。

とりあえず適当に動詞的なものを集めてきて場当たり的に置換してみましたが、たぶん文法のルールを調べたらもっと簡単に書けるのでしょうね。

final String[] strings = { "derives", "occurs", "moves", "used",
"crosses", "moving", "passing", "intersects", "lowering",
"reaching", "divided", "blocked", "located", "occulting",
"forms", "has", "refracted", "involving", "tilted", "aligned" };
for (final String string : strings) {
System.out.println(string
+ " -> "
+ string.replaceFirst("(ss)es$", "$1").replaceFirst(
"([ertm])s$", "$1").replaceFirst("(ate|se|de)d$",
"$1").replaceFirst("ed$", "").replaceFirst(
"(v)ing$", "$1e").replaceFirst("ing$", "")
.replaceFirst("^has$", "have"));
}

char[]を使わない方がいいと思う理由は
- プログラムが長くなるので可読性が悪くなる
- 1つのオブジェクトを表すのに配列を使うのはおかしい
- 何となく性能が悪くなりそうな気がする
- 文字列処理はStringクラスでできるので、わざわざ自分で書くまでもないのでは…
あたりでしょうか。私の個人的な好みですが。


tetsu :

なるほど~。確かに正規表現を使えばスマートにプログラムが書けそうですね^^
勉強になりました。

実はこのプログラムは、元になるCのプログラムがあって、それを
Javaに移植する時に起こった問題なのです。元のプログラムでは
char* を駆使して、ひたすらif文で場合分けして書いてあったので
正規表現を使うという点が抜けてました。

こういったプログラムもさらっと書けるようになりたいです(>Д<;)


ぜん :

あー、そうなんですか。
他人が昔Cで作ったどうしようもないプログラムを移植させられているのなら、凝らずにchar[]でいいんじゃないですかね(笑)オリジナルと同じ動きをするのが一番大事ですから。
だいたい文字列処理はPerlやPHPの得意分野で、あんまりJavaでやるもんじゃないですしね。


コメントする

Advertizement

このブログ記事について

このページは、tetsuが2007年6月18日 20:08に書いたブログ記事です。

ひとつ前のブログ記事は「Thunderbirdがエラーを吐く」です。

次のブログ記事は「Javaで特殊関数を利用するには」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 5.0

最近のコメント

ぜん on Stringの結合を繰り返す: あー、そうなんですか
tetsu on Stringの結合を繰り返す: なるほど~。確かに正
ぜん on Stringの結合を繰り返す: それはけっこう面倒で
tetsu on Stringの結合を繰り返す: ある英単語をすべて原
ぜん on Stringの結合を繰り返す: やりたい事をもう少し

カウンタ

リンク