転職を繰り返したサラリーマンの多趣味ブログ

30才未経験でSEに転職した人の多趣味ブログ

【Java】文字と文字列の変換に関するメモ

Stringからcharの配列に変換

String str = "abc";
char[] array = str.toCharArray();


StringBuilderからcharの配列に変換

StringBuilder sb = new StringBuilder("abc");
char[] array = new char[sb.length()];
sb.getChars(0, array.length, array, 0);


charの配列からStringオブジェクトを生成

char[] array = {'a','b','c'};
String str = new String(array);


charの配列からStringBuilderを生成

char[] array = {'a','b','c'};
StringBuilder sb = new StringBuilder();
sb.append(array);

【Java】文字列比較についてのメモ

同一の文字列オブジェクトを参照しているため、==演算子で比較するとtrue

String str1 = "abc";
String str2 = str1;
if(str1 == str2) {
    System.out.println("成立");  // 出力される
}


異なる文字列オブジェクトのため、==演算子で比較するとfalse

String str1 = "abc";
String str2 = new StringBuilder("abc").toString();
if(str1 == str2) {
    System.out.println("不成立");  // 出力されない
} else if (str1.equals(str2)) {
    System.out.println("成立");    // 出力される
}


文字列から暗黙に生成されるStringオブジェクトは、文字列の内容が一致すれば同一のStringオブジェクト

String str1 = "abc";
String str2 = "abc";
if(str1 == str2) {
    System.out.println("成立");  // 出力される
}


文字列の内容を比較する場合は、常にequalsメソッドを使用

String str1 = "abc";
String str2 = new StringBuilder("abc").toString();
if(str1.equals(str2)) {
    System.out.println("成立");  // 出力される
}


StringBuilderオブジェクトを比較する場合は、contentEqualsメソッドを使用

StringBuilder sb1 = new StringBuilder("abc");
StringBuilder sb2 = new StringBuilder("abc");
if(sb1 == sb2) {
    System.out.println("不成立");    // 出力されない
} else if(sb1.equals(sb2)) {
    System.out.println("不成立");    // 出力されない
} else if(sb1.toString().contentEquals(sb2)) {
    System.out.println("成立");      // 出力される
}

【Java】文字列結合についてのメモ

演算子「+=」を使った文字列結合の場合、暗黙的にStringBuilderオブジェクトを生成している。
そのため、ループ処理を使った文字列結合の場合は、StringBuilderオブジェクトの生成を最小限にすべき。

String[] array = {"abc", "def", "ghi"};
StringBuilder sb = new StringBuilder();
for (String str : array) {
    sb.append(str);
}
System.out.println(sb);  // abcdefghiと出力される

【Java】StringBuilderクラスでよく使うメソッドメモ

変更可能文字列クラスのStringBuilderクラスのメモ。


append:指定した文字列を追加

StringBuilder sb = new StringBuilder("abc");
System.out.println(sb.append("def"));   // abcdefと出力される


delete:部分文字列を削除

StringBuilder sb = new StringBuilder("abcdef");
System.out.println(sb.delete(1, 3));   // adefと出力される


indexOf:文字列から、指定した文字を検索

StringBuilder sb = new StringBuilder("abcdef");
System.out.println(sb.indexOf("c"));   // 2と出力される


insert:文字列を指定位置に挿入

StringBuilder sb = new StringBuilder("abcdef");
System.out.println(sb.insert(3, "abc"));     // abcabcdefと出力される


replace:文字列を置換

StringBuilder sb = new StringBuilder("abcdef");
System.out.println(sb.replace(3, 5, "abc"));    // abcabcfと出力される


setCharAt:指定位置に文字をセット

StringBuilder sb = new StringBuilder("abcdef");
sb.setCharAt(3, 'c');
System.out.println(sb);   // abccefと出力される


substring:部分文字列を取得

StringBuilder sb = new StringBuilder("abcdef");
System.out.println(sb.substring(3, 5));  // deと出力される


StringオブジェクトからStringBuilderオブジェクトに変換

String str = "abc";
StringBuilder sb = new StringBuilder(str);


StringBuilderオブジェクトからStringオブジェクトに変換

StringBuilder sb = new StringBuilder("abc");
String str = sb.toString();

【Java】Stringクラスでよく使うメソッドメモ

JavaのStringクラスでよく使うメソッドのメモです。

 

charAt:指定した位置の文字を取得

String str = "abcdefghijklmn";
str.charAt(0); // aが出力される


compareTo:辞書的にどちらが大きいか比較

String str1 = "a";
String str2 = "b";

System.out.println(str1.compareTo(str2));  // -1が出力
System.out.println(str1.compareTo(str1));  // 0が出力
System.out.println(str2.compareTo(str1));  // 1が出力


contains:指定した文字列を含むかチェック

String str = "abcdef";
System.out.println(str.contains("g"));  // falseを出力
System.out.println(str.contains("a"));  // trueを出力


indexOf:文字列から、指定した文字を検索

String str = "abcdef";
System.out.println(str.indexOf("c"));  // 2を出力


isEmpty:空文字チェック。空文字であれば、true。

String str = "";
System.out.println(str.isEmpty());  // trueを出力


split:文字列を区切り、配列に分割

String str = "abc,def,ghi";
String array[] = str.split(",", 0); 
System.out.println(array[0]);   // abcが出力
System.out.println(array[1]);   // defが出力
System.out.println(array[2]);   // ghiが出力


startsWith:指定した文字列から始まるかチェック

String str = "abcdefghi";
System.out.println(str.startsWith("b"));   // falseが出力
System.out.println(str.startsWith("a"));   // trueが出力


substring:部分文字列を取得

String str = "abcdefghi";
System.out.println(str.substring(2, 5)); // cdeが出力


join:区切り文字列で結合

String str = String.join(".", "abc","def","ghi");
System.out.println(str);   // abc.def.ghiと出力される


また、文字列リテラルは暗黙的にStringクラスのオブジェクトを生成する。だから、以下の書き方は不要なオブジェクトを生成してしまう。

String str = new String("abcdefg");

【海外ドラマ感想】「Homelnad シーズン1-2 トラウマ」

 こんにちわ。上上下下太郎です。
Homeland シーズン1-2 トラウマの感想です。

アルカイダから奇跡の生還を果たしたニコラス・ブロディ軍曹。しかし、CIA諜報員であるキャリー・マディソンだけが、ブロディ軍曹に疑惑の眼差しを向ける。
前回は、キャリーの闇が垣間見えましたが、今回はブロディ軍曹の葛藤が描かれています。また、人はいつ、どんな時に自分の救いに出会えるのかわかりません。

あらすじ

アルカイダから帰国し、アメリカ全土がブロディ軍曹に注目する中、当の本人は家に閉じこもる生活を送っていた。軍はブロディを再入隊させ、広告塔に仕立てあげたいが、ブロディはそれを拒否。
そんな中、キャリーの元へ情報提供者から重大な情報が入る。アルカイダの最高指導者、アブ・ナジールがファリド皇太子に会いに来たという目撃情報だ。アブ・ナジールが動いたことと、ブロディの帰国との関連を指摘するキャリーだが。。

感想(※ネタバレ含みます)

見た率直な感想・・・☆☆☆(普通に面白い)

今作では、ゲスト(と言ってしまっていいのかわかりませんが)が2名出演しています。

まず1人目は、「ベター・コール・ソウル」でジミー(ソウル・グッドマン)の兄役を演じているマイケル・マッキーン(チャック・マッギル)が、ソウルに弱みを握られている判事役として出演しています。

ベター・コール・ソウルでは弁護士役を、Homalandでは判事役ということで、偶然だとは思いますが法廷つながりになっています(笑)。

そしてもう1人は、スーパーガールでおなじみのメリッサ・ブノア

眩しすぎるくらい綺麗な人ですが、このHomelandではすごい役を演じています。出演時間は短いですが、それでもあの役を演じた彼女は素晴らしいです。後のスーパーガールでの活躍も納得な女優さんです。

 

さて、今作の見どころはブロディの「決意」です。
冒頭ではブロディは、部屋に閉じこもり、記者たちに全く会おうとしません。ソウルが指摘していましたが、「テロリストとしてアメリカに帰国したなら、戦争の英雄として記者たちの前に積極的に出るはず」だと。
しかしキャリーは、「テロリストといっても人間。家族を前にして、決意が揺らいでいる」と反論します。

この2人のやり取りは、ブロディの心境そのものです。ブロディは悩み、苦しみますが、最後には戦争の英雄”ごっこ”を始めるため、記者たちの前に立ったところで今作が終わります。

僕はブロディが、テロリストとして生きることを再決意した点は以下だと考えています。

  1. 親友のマイクがブロディに、軍に再入隊することを迫ったこと
  2. 上とも関連しますが、マイクが自分の家族と親密すぎていること
  3. 人には戦わなければならないときがあるから

1と2に関しては、ブロディがマイクに嫉妬していることは明らかです。家に帰ると何故かマイクが居て、子供たちは自分よりもマイクになついている。息子のクリスが、「マイクおじさん」と呼ぶことも納得がいっていない様子。
そして、妻のジェシカも軍の再入隊を遠回しに迫ったことも、ブロディを傷つけたのではないでしょうか。

3に関しては、象徴的なシーンがあります。ブロディがクリスに「人には戦わなければならないときがある」と教えるシーンです。これは、自分自身がテロリストとして戦うことを決意した瞬間ではないかと僕は考えています。
クリスに話しかけていますが、実は自分自身に言い聞かせているように見えます。

そして最後に、ブロディがイスラム教に出会った場面が回想で描かれています。まさに、光(救い)を見つけた瞬間でした。このシーン、まさに必見です。

最後まで読んでいただき、ありがとうございました。