119489 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

カプリッチョ

カプリッチョ

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x

PR

キーワードサーチ

▼キーワード検索

2010.06.05
XML
カテゴリ:Java

問題23 逆ポーランド記法で、計算する電卓プログラム

今回は、問題を解くための個々の手法について考えてみる。


文字列からの文字の取り出し

1.先頭から1文字ずつ取り出す

public char charAt(int index)

 index に、0~文字数-1を指定することで、1文字ずつ取り出せる。

String exp = "43+93-*3/";

for (int n = 0;n < exp.length();n++) {

char c = exp.charAt(n);

System.out.println(c);

}

2.String型の配列に分解する

public String[] split(String regex)

 元の文字列を、指定した文字列で分解し、それぞれをString型の配列に格納する。

String exp = "43+93-*3/";

String[] s = exp.split("");

 上で示したように、引数に空文字("")を渡すと、1文字ずつに分解される。

3.char型の配列に分解する

public char[] toCharArray()
 splitと似ているが、こちらはchar型配列に格納する。したがって、切り分ける文字の指定も無い。
String exp = "43+93-*3/";
char[] c = exp.toCharArray();

文字が数字か?

 取り出した文字について、スタックするか、計算をするかの判定のため、その文字が数字かを調べる。

1.isDigit

public static boolean isDigit(char ch)

 Characterクラスのメソッドで、引数で渡した文字が、数字である場合、trueを返す。

 その際、全角の数字もtrueを返す。ただし、漢数字はfalseを返す。

char c = '1';

System.out.println(Character.isDigit(c));

2.文字コード

 取り出した文字のコードが、0x30~0x39の範囲内であれば、数字である。

3.数字との比較

 取り出した文字が、'0'~'9'のいずれかと一致すれば、数字である。


スタック

 Javaでスタックを実行するには、LinkedListを用いるのが、最も簡単(一般的?)である。

public class LinkedList<E>
 例えば、Integer型のリストを作る場合は、以下の通り。
import java.util.*;
LinkedList<Integer> list = new LinkedList<Integer>();

 ここまでは、ArrayListと同じ。スタックは、pushで格納し、popで取り出すが、LinkedListでは、そのものズバリのメソッドが用意されている。

public void push(E e)

public E pop()

 先のリストでの使用例は、以下の通り。

list.push(123);

int a = list.pop();


文字(列)を数値にする

1.parse系メソッド

 対象が文字列の場合、一般的に使用される。

String s = "123";

int a = Integer.parseInt(s);

 例は、Integerだが、他の数値型についても同様のメソッドがある。

2.digitメソッド

 対象が文字の場合は、parse系メソッドは使用できない。

 この場合、Characterクラスのdigitメソッドが使用できる。

public static int digit(char ch,int radix)

 引数の文字に対して、radixに指定した基数でint型に変換する。基数は省略できず、10進数の場合でも、10を指定しなければならない。

int a = Character.digit('5', 10);

 






お気に入りの記事を「いいね!」で応援しよう

最終更新日  2010.06.05 11:36:31
コメント(2) | コメントを書く


カレンダー

カテゴリ

コメント新着

 アトム・キャット@ ソース COCO さんコメントありがとうございます。…
 COCO@ 突然すみません(><) 今javaの勉強中です。カレンダーの作成が…
 COCO@ 突然すみません(><) 今javaの勉強中です。カレンダーの作成が…
 アトム・キャット@ お大事に 立春が過ぎ、暖かくなったな、と思ったら…
 未幸吉(みゆきち)@ うわぁやるきでねぇ~!  19日の資格試験に向けて、ブースとかけ…

© Rakuten Group, Inc.