• ベストアンサー

初心者です。splitメソッドで、NoSuchMethodErrorが出ます。

こんにちは。 Javaの初心者です。 csvファイルから1行ずつ読み込み、それをsplitで配列に入れて 特定の文字を出力する、といったことをしたいと思っています。 ソースは以下のとおりです。 import java.lang.*; import java.io.*; public class TestJava { public static void main(String[] args) { try { BufferedReader br = new BufferedReader (new FileReader("in.csv")); BufferedWriter bw = new BufferedWriter(new FileWriter("out.csv")); String line = null; while ((line = br.readLine()) != null) { String[] inArray = line.split(","); String s = inArray[0].substring(2, 3); System.out.println (s); bw.write(line); bw.newLine(); } bw.flush(); br.close(); bw.close(); } catch (IOException e) { e.printStackTrace (); System.exit(-1); } } } コンパイルは通るのですが、実行すると、 C:\java\src>java TestJava Exception in thread "main" java.lang.NoSuchMethodError at TestJava.main(TestJava.java:19) というエラーが出てしまいます。 (19行目は、String[] inArray = line.split(",");の部分です) ネットで調べてみると、mainメソッドの書き方が間違っているのでは、 とあったので、何度も注意深く見てみたのですが mainメソッドに間違いはないように思えます。 また、クラスパスが通ってないのでは、ともあったのですが、 環境変数のclasspathに「C:\java\src」を設定しています。 どなたか分かる方いらっしゃいましたら、 ご教授いただけませんでしょうか? よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kztk
  • ベストアンサー率53% (59/110)
回答No.2

Stringのsplit()メソッドは、「導入されたバージョン: 1.4 」となっていますので、1.4以降のjavacでコンパイルし、1.4未満のjavaで実行しているのではないでしょうか。java -versionで出てくるバージョンはいくつですか?もしも1.2や1.3ならば環境変数PATHの順序を見直すか、javaコマンドをフルパスで指定すれば解決すると思います。 #ただ、試しに手元の環境で1.5でコンパイル→1.3.1で実行すると、UnsupportedClassVersionErrorになってしまいました。1.4は手元にないので試せませんでした・・・。

参考URL:
http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/String.html#split(java.lang.String)
ayu_cha
質問者

お礼

回答ありがとうございます。 動作確認までしていただき、ありがとうございます。 java -versionを実行したところ、 C:\java\src>java -version java version "1.3.1_01" Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_01) Java HotSpot(TM) Client VM (build 1.3.1_01, mixed mode) と出てきました。 PATHの順序を見直して(一番最初に持って来ました)みたところ、 やはり同様のエラーが出たのですが、 javaコマンドをフルパスで指定したら、正常に動作しました。 すみません。 フルパスで指定したら動作する理由がよく分からないのですが、 binフォルダへのパスが通ってないのでしょうか? よろしくお願いいたします。

その他の回答 (3)

  • kztk
  • ベストアンサー率53% (59/110)
回答No.4

>binフォルダへのパスが通ってないのでしょうか? 通っていないのでしょう。 javaコマンドを打つ前にSETコマンドを打ってみてください。PATHの順序は期待した通りのものが表示されますか?

ayu_cha
質問者

お礼

お礼が遅くなってしまい、申し訳ございません。 下の方のお礼に書いたとおりですが、 pathの設定を間違っていました。 ご迷惑おかけして、申し訳ございませんでした。 ありがとうございました。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

>フルパスで指定したら動作する理由がよく分からないのですが、 binフォルダへのパスが通ってないのでしょうか? PATHはどのように変更しました? コンパイルや実行をしているコマンドプロンプトを 開いたままでコンパネ等から変更しても その変更はコマンドプロンプトの環境変数に反映されません。 コマンドプロンプトで PATH=... で設定するとか、コマンドプロンプトを 開きなおすとかしないといけません。

ayu_cha
質問者

お礼

お礼が遅くなってしまい、申し訳ございません。 pathをよく見てみたら、 binフォルダへのパスが間違っていました。 正しいパスを設定したところ、動作しました。 ご迷惑をおかけして申し訳ありませんでした。 ありがとうございました。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

質問にあるプログラムをコピペしてわたしのところでコンパイル&実行してみましたが、 何の異常もなく動作しました。 環境変数CLASSPATHを空にしても動きましたので、環境が何かおかしいような感じがします。 どのパッケージをインストールしましたか? デフォルトであれば、c:\program files\java の下にjdkのバージョン等の 番号つきでインストールされていると思いますが、どうなっていますか?

ayu_cha
質問者

お礼

回答ありがとうございます。 動作確認までしていただき、ありがとうございます。 やはり、環境がおかしいのでしょうか? パッケージ(インストールしたフォルダ名のことでしょうか?)は、 j2sdk1.4.2_15とありました。 他にも、c:\program files\java 以下に j2re1.4.2_15とjre1.6.0_02というフォルダがありました。 よろしくお願いいたします。

ayu_cha
質問者

補足

すみません。 上に書いているのですが、 javaコマンドをフルパスで指定したら、動作しました。 sakusaker7様へのお礼文を書いたあとで動かしたため、 補足が別になってしまい、申し訳ございません。