Movatterモバイル変換


[0]ホーム

URL:


Yukun's Blog

難しいことを簡単に分かりやすく紹介

フォローする

JavaとRubyで文字列の終端の扱いの違い

Java,Ruby

RubyのコードをJavaに書き直す際に注意する相違点が幾つかあったので、そのうちの一つを挙げてみます。特に文字列関係は色々やりにくいです。

a = "4321"p a[4] #=> nil

Rubyでは文字を[]で指すとき終端文字の次の添え字を指すとnilを返します。これをCで言う文字列の終端文字’\0’のように考え、if文などの判定に用いることが出来ます。

対して、Javaで同じような書式で書こうものなら、

public class Test {  public static void main(String[] args) {    String str = "abcdef";    char[] arr = str.toCharArray(); // String型をchar型の配列に変換    System.out.println(arr);    System.out.println(str.length()+ " == " + arr.length);    try {      System.out.println(arr[6]);    } catch (java.lang.ArrayIndexOutOfBoundsException e) {      System.out.println("キャッチ:" + e);-    }    try {      System.out.println(str.charAt(6));    } catch (java.lang.StringIndexOutOfBoundsException e) {      System.out.println("キャッチ:" + e);    }    // 最後の文字を知るためには    System.out.println(str.charAt(str.length() - 1));  }}

のように例外でキャッチしなければなりません。

実行結果

6 == 6abcdefキャッチ:java.lang.ArrayIndexOutOfBoundsException: 6キャッチ:java.lang.StringIndexOutOfBoundsException: String index out of range: 6f

まぁ、str.length()を用いて文字列長でcharAtで指す文字が文字列の末尾かどうかを判定することで制御すればよいまでの話かもしれません。

今回はとあるアルゴリズムを移植上、気づきが色々あったのでこうした機会に言語仕様に対する理解を深めていきたいです。

関連記事

NO IMAGE

タグの中の要素を抜き出すRuby関数

ライブラリを使えば簡単ですが、正規表現の学習の為に。ソースコードdef return_between(unporsed, start,...

NO IMAGE

Java, デザインパターン: Simple Factory – インスタンスの生成方法を任せる

以前デザインパターンの理解の確認がてら簡単なコードを書いた。リファクタリングの前後を省いているので初見ではパターンのメリットと適応基準が見え...

NO IMAGE

Java: ローカルホスト名とIPアドレスを取得 – InetAddress.getLocalHost()メソッド

ローカルのホスト名とIPアドレスの取得方法です。InetAddress.getLocalHost()メソッドでInetAddressクラス...

NO IMAGE

Ruby: lambdaメソッドを使いブロックをオブジェクト化

に関して、練習します。他の言語と比較してRubyのコードブロックの扱いは特徴的で扱い難そうに見えますが、使いこなせればコード量を減らせるし...

NO IMAGE

ArrayListのコンストラクタに初期容量を指定することで要素の追加処理を高速化

javaのArrayListのコンストラクタにはオーバーロードで幾つかの種類がありますが、その一つに以下のようなものがあります。Array...

NO IMAGE

Java: イベント駆動によるModelとViewの分離 – Observer パターン

よくGUIやWebアプリの簡単なサンプルソースなどは、UIとアプリケーションのロジックが同じクラスまたはメソッドに書かれている場合が多い。そ...

Java: 複数クライアントでの自動Web(HTTP GET)レスポンス計測ツール

これは何?少数(1〜数台)のクライアント環境から多数のWebアクセスのエミュレート及びそのレスポンスを計測する際に活用するコード。...

NO IMAGE

JavaプログラムからExcite翻訳を利用

POSTメソッドを用いてWebページのフォームにリクエストを送信し、そのレスポンスを取得するプログラム例として、エキサイト 翻訳を利用してみ...

NO IMAGE

Java, JSP: 現在時刻が指定期間内か判定する – GregorianCalendar#before、after

日時を扱うクラスはDateとGregorianCalendarがありますが、Sunは後者を推奨しているようです。実際GregorianCal...

NO IMAGE

検索エンジンを実装 (4)AND演算

AND演算処理の概要上の図から、ある2つの語の転置インデックスリストをA, Bとします。ここで、要素をそれぞれa, b(整数)とし演算結...


コメントをどうぞコメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

検索


Sponsored Link

最近の投稿

カテゴリー

アーカイブ

最近のコメント


[8]ページ先頭

©2009-2025 Movatter.jp