Javaで配列の長さを知るメソッド

このQ&Aのポイント
  • Javaの配列の長さを知るメソッドを調べています。
  • APIを調べて、クラスArrayのgetlengthを使って長さを取得しようとしましたが、うまくいきませんでした。
  • Stringクラスのlengthを使用しても問題が発生しました。書き方が間違っている可能性があります。
回答を見る
  • ベストアンサー

Javaで配列の長さを知るメソッド

Javaの配列の長さを知るメソッドを調べています。 例えば String sTest[][] = new String[2][2]; sTest[0][0] = "something"; だとして、sTest[0][0]の長さ(文字数)の9を出力したいのですが、どのようにすればいいのでしょうか。 APIを調べて、クラスArrayのgetlengthを使って System.out.println(getlength(sTest[0][0])); としてみたら駄目でした。 また、Stringクラスのlengthを使って System.out.println(length(sTest[0][0])); としても駄目でした。 まだAPIにあまりなれていないのですが、書き方が間違っているのでしょうか?

  • fuyu
  • お礼率69% (145/210)
  • Java
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • ranx
  • ベストアンサー率24% (357/1463)
回答No.1

Javaでは、文字列は文字の配列ではありません。 文字列の長さと配列の長さは全く異なる概念です。 タイトルは「配列の長さ」となっていますが、本当は文字列の長さについての 質問とみなしてお答えします。結論から言えば System.out.println(sTest[0][0].length()); でできるはずです。 余談ですが、 String s[] = new String[2]; System.out.println(s.length); とすれば、配列の長さ2が出力されます。

fuyu
質問者

お礼

おかげさまで解決いたしました。回答ありがとうございました。

関連するQ&A

  • 配列クラスのクラス名

    配列クラスのクラス名 配列クラスのクラス名を教えてください。 配列はクラスですよね。そこまでは分かります。 こんなコードを実行しましたが System.out.println((new int[0]).getClass()); System.out.println((new boolean[0]).getClass()); System.out.println((new String[0]).getClass()); System.out.println((new Integer[0]).getClass()); 親切にこのような結果を出力してくれます。 class [I class [Z class [Ljava.lang.String; class [Ljava.lang.Integer; 結果として配列が何というクラスなのかは分かりません。 (もしかして『[I』『[Z』『[L』という名前のクラスでしょうか?) 昔Javaのソースを読んだときに、配列クラスのファイルも 読んだことがあるような気がするのですが、 なんと言うクラスだったか忘れてしまいました。 パッケージ名+クラス名を教えてください。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaで配列を定義する方法

    こんにちは、片岡といいます。 Java言語で配列を定義する場合、以下の二つの書式に違いはありますか。 違いがあるとすれば、どのような違いですか。 また、違いがないのならば、どちらの記述がよいのですか。 ご存知の方はいらっしゃいませんか。 (1) public class Main1 { public static void main(String[] args) { String str[] = new String[] { new String("itiban"), new String("niban"), new String("sanban"), }; for (int i = 0; i < str.length; i++ ) { System.out.println(str[i]); } } } (2) public class Main2 { public static void main(String[] args) { String str[] = { new String("itiban"), new String("niban"), new String("sanban"), }; for (int i = 0; i < str.length; i++ ) { System.out.println(str[i]); } } } なお、私の環境は以下の通りです。 OS: Microsoft Windows XP Professional SP2 java: java version "1.4.2_13" 検索エンジンで"配列 オブジェクト java"を検索しましたが、 解決に役立つ情報は見つかりませんでした。

    • ベストアンサー
    • Java
  • java 配列について

    public class Sample{ public static void main( String[ ] args ){ String x = "pen"; String[] y = new String[1]; y[0] = x; x = "pencil"; System.out.println(y[0]); } } java初心者です。 配列の参照先を変更して 配列の数を変更せず配列0に 実行時にpencilと表示させたいのですが よい方法はありますでしょうか?

    • ベストアンサー
    • Java
  • 2つの配列を1つの配列にする。

    JAVA初心者です。1日に何度も質問してしまってすいません。 問題 private static int[] concat(int[] ia1, int[] ia2) のメソードを使いarray1とarray2[の2つの配列が両方intのとき、array1 array2と続く配列を表示する。 private static int[] concat(int[] ia1, int[] ia2) { int e; for (e=0; e < ia1.length; e++) { } for (e=0; e < ia2.length; e++) { }     return new int[0]; } public static void main(String[]args){ int[] testIntArray1 = {1, 2, 8, 4}; int[] testIntArray2 = {99, 88, 77, 66}; // You should also test the case where the first // array is empty, the second array is empty, and // both arrays are empty. System.out.println("First test array for concat is: "); int e; for (e=0; e < testIntArray1.length; e++) { System.out.print(testIntArray1[e] + " "); } System.out.println(); System.out.println("Second test array for concat is: "); for (e=0; e < testIntArray2.length; e++) { System.out.print(testIntArray2[e] + " "); } System.out.println(); int[] result = concat(testIntArray1, testIntArray2); System.out.println("Result of concat is: "); for (e=0; e < result.length; e++) { System.out.print(result[e] + " "); } System.out.println(); //*********************************************************** 結果 First test array for concat is: 1 2 8 4 Second test array for concat is: 99 88 77 66 Result of concat is: 1 2 8 4 99 88 77 66 ←2つの配列分の値。 メインはなんとかできたのですが、まだ始めたばかりで配列などの仕組みも基本的なことしか分りません。どのようにしたら2つの配列をひとつの配列に1番目の配列、2番目の配列の順に収める事ができるのでしょうか。キーワードなどのアドバイスよろしくお願いします。

    • ベストアンサー
    • Java
  • javaのメソッド呼び出し

    javaで質問があります。メソッドを呼び出すとき、 クラス.メソッド(引数)だと思いますが、 「.」が2つあるものがあります。 どういったものでしょうか? あるプログラムに Code.PerComFlag.ReCom.equals(atmlogDTO.getatmComFlg()) のがありました。 また、javaの本に System.out.println(・・・) という記述もあります。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 配列変数のlengthプロパティは、どうしてそのまま参照できるのですか?

    Javaの基礎を学んでいるのですが、ちょっと仕様に疑問があるのでお伺いしたいと思います。 昔、カプセル化について教わった事があったのですが、それによると、オブジェクトの持つ属性(プロパティ、フィールド)は、操作(振る舞い、メソッド)を介してアクセス出来るというのが望ましいはずです。 でも、例えばmainメソッドのコマンドライン引数であるargsという変数は、配列変数です。lengthというプロパティで要素の数を取り出せます。 lengthはプロパティであり、もちろんメソッドじゃないです。 どうしてわざわざこんな仕様になっているのでしょうか? J2SEのAPI仕様書が以下のURLにありましたので、ちょっと調べてみました。 http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/index.html それによると、Arrayクラスなどは、ちゃんとgetLengthメソッド等を使用しています。 何か理由があったのだと思うのですが、予想がつきません。 どなたかご存じないでしょうか?

  • javaのオーバーライドについての質問です。

    *  クラスParent04に受け取ったString配列の中身を全て大文字に変換するChangeメソッドが定義されています。クラスParent04を継承するクラスChild04でChangeメソッドを  オーバーライドして、String配列の中身を全て小文字に変換するように変更してください。  その後クラスOverRide04のmainメソッドからChangeメソッドを呼び出して、  変換後のString配列の要素を全て出力してください。 */ // オーバーライドされるので覆い隠される class ORParent04{    public String[] Change(String[] strArray){       int len = strArray.length;      String[] Array = new String[len];      for(int i = 0; i < len; i++){       Array[i] = strArray[i].toUpperCase();      }      return Array;   } } // ORParent04クラスを継承し、ORChild04でオーバーライド // こちらが適用される。 class ORChild04 extends ORParent04{    //ここからプログラムを追加してください。    public String[] Change(String[] strArray){       int len = strArray.length;       String[] Array = new String[len];       for(int i = 0; i < len; i++){                   // toLowerCaseで小文字に変換         Array[i] = strArray[i].toLowerCase();       }       // 値を返す       return Array;    } } class OROverRide04{   public static void main(String[] args){        // ORChild04クラスのインスタンス化     ORChild04 ORchild04 = new ORChild04();       //ここからプログラムを追加してください。     // Changeメソッドの呼び出し:戻り値String[],引数String[]      String[] array = ORchild04.Change(String[] args);          // 表示      System.out.println(array);   }  } このような問題で、現在これをコマンドプロンプトでコンパイルすると、mainメソッド内のString[] array = ORchild04.Change(String[] args);メソッド呼び出し部分が指定され、 「'.class'がありません」 「;がありません」 という2つのエラーが表示されます。ネットでエラー表記の意味を検索し、コードを確認しましたが、「{}」と上記より上の行の;が特に抜けている、という訳ではありません。勿論自分が何か見落としている為にコンパイルエラーになるのですが、戻り値と引数の値は合わせているので、心情としては「動けジ・O!何故動かん!?」という具合です。 どなたか考え方やヒントなどお願い致します。後もう少しだと思うのですが。。。

    • ベストアンサー
    • Java
  • Javaのプログラムに関する質問です。

     以下のプログラムはコマンドライン引数で複数の数字を  受け取り、int型配列arrayに受け取った値を代入して  arrayの先頭から順番に表示しています。    変換クラスと、表示クラスを作成し  (1)の部分を変換クラスで、  (2)の部分を表示クラスで行うように修正してください。 */ class ClassAdd08{  public static void main(String[] args){   HenkanClass subA = new HenkanClass();//HenkanClassのインスタンス化   subA.henkan(len,array);//変換メソッドの呼び出し   HyoujiClass subB = new HyoujiClass();//HyoujiClassのインスタンス化   subB.hyouji();//表示メソッドの呼び出し  } }   //****************************     (1)     ********************************** class HenkanClass{//変換クラスを新規作成  public void henkan(){//変換メソッド   int len = args.length;   int[] array = new int[len];   for(int i = 0; i < len; i++){    array[i] = Integer.parseInt(args[i]);   }  } }    //****************************     (1)     **********************************    //****************************     (2)     ********************************** class HyoujiClass{//表示クラスを新規作成  public void hyouji(){//表示メソッド   System.out.println("受け取った引数:" + len + "個");      for(int i = 0; i < len; i++){    System.out.println((i + 1) + "個目の数:" + array[i]);   }  }   //****************************     (2)     ********************************** } クラスのインスタンス化と、対応するメソッドまでは作成したのですが、その後どうすればいいか分かりません。考え方やヒントなど、皆様の知恵をどうかお貸しください。お願い致します。

  • Javaからストアド実行(配列項目)

    Javaからストアドを実行しようとしていますが、 単項目のIN、OUTは問題ないのですが IN引数を配列にしようとした場合うまく処理できません。 ARRAY array = new ARRAY(ad, con, values);のところで java.sql.SQLException Non supported character set: oracle-character-set-832 で落ちてしまいます。 原因であると思われた、CLASSPATHにnls_charset12.jarが通っているかということも確認しました。 原因が分かる方がいましたら教えていただきたく思います。 よろしくお願いします。 環境 OS : WindowsXP DB : Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 JDBC : Oracle JDBC Driver 9.2.0.5 JDK : JDK 1.4.2 ---------------------------------------------------------------- import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import oracle.jdbc.OracleCallableStatement; import oracle.jdbc.OracleTypes; import oracle.sql.ARRAY; import oracle.sql.ArrayDescriptor; public class TestPlsql { public static void main(String[] args) throws Exception { String username = "ID"; String password = "PASS"; String thinConn = "jdbc:oracle:thin:@DBADD:1521:DBNAME"; try { // Oracle JDBC driverをロードします。 DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); // DB接続 Connection con = DriverManager.getConnection(thinConn,username,password); // SQLコンテナ作成 // 引数:IN IN OUT OUT IN OUT String sql = "{call TEST_PKG.TEST_PRO(?,?,?,?,?,?)}"; OracleCallableStatement cstmt = (OracleCallableStatement)con.prepareCall(sql); cstmt.setInt( 1, 999 ); cstmt.setString( 2, "TEST" ); cstmt.registerOutParameter( 3, OracleTypes.INTEGER ); cstmt.registerOutParameter( 4, OracleTypes.VARCHAR ); // 配列 String[] values = {"18", "25", "104", "53", "29"}; ArrayDescriptor ad = ArrayDescriptor.createDescriptor("VCHAR2ARRAY", con); ARRAY array = new ARRAY(ad, con, values); ///////ここでエラー cstmt.setArray(5, array); cstmt.registerOutParameter(6, OracleTypes.ARRAY, "VCHAR2ARRAY"); // SQL実行 cstmt.execute(); // OUT引数の値を取得する System.out.println(cstmt.getInt(3)); System.out.println(cstmt.getString(4)); ARRAY array2 = (ARRAY) cstmt.getArray(6); String[] s = (String[]) array2.getArray(); for (int i=0; i<s.length; i++) { System.out.println(s[i]); } cstmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } }

  • java linkedlistのメソッドについて

    javaのlinkedlistを勉強してます。 LinkedList<String> array = new LinkedList<String>(); array.add("A"); array.add("B"); 上記のようにしてLinkedListに要素を入れることができたりすることは理解できたのですが addメソッドやremoveメソッドの使い方がよくわかりません。 addメソッドなどはいつ、どのようなときに使うのでしょうか? 上で書いたような方法だけでは不十分なのでしょうか? できればメソッドの使い方のサンプルがあったらいただけないでしょうか? それと僕の使っている教科書にはNodeというものがありnextとdataというものを入れなければならないのですがこちらも使い方がわかりません。 質問が抽象的になってしまいましたがわかる方回答お願いいたします。

    • ベストアンサー
    • Java

専門家に質問してみよう