HHeLiBeXの日記 正道編

日々の記憶の記録とメモ‥

Java

標準入力から数値列を読み込んで、降順にソートして標準出力に吐き出す

手元にある各言語で、標準入力から数値列を読み込んで、降順にソートしたうえで標準出力に吐き出すプログラムを書いてみようと思ったメモ。 プログラム言語にもよるが、昇順は簡単なのに降順となったとたんに苦労するケースがあったりする。 標準入力から入…

標準入力から数値列を読み込んで、昇順にソートして標準出力に吐き出す

手元にある各言語で、標準入力から数値列を読み込んで、昇順にソートしたうえで標準出力に吐き出すプログラムを書いてみようと思ったメモ。 標準入力から入力される数値列の要件は以下の通り。 1行に1つの数値が書かれている 不正入力のチェックは不要とする…

入力文字列をparseIntで解析する場合とScannerを使用する場合との速度の違い

プログラミングコンテストとかでjava.util.Scannerを使って入力の数値を取得しようとすると、どうしてもInteger.parseIntした場合より実行速度が遅くなってしまうということで、どの程度のものなのかを簡単に調べてみたメモ。 検証環境 CentOS 7のVM(Virtual…

JDKのバージョンによる文字列連結処理の速度の違い

過去にもなんか調べた気がしないでもないが、Java 9リリース記念ということで、Sun/Oracle JDK限定だが、JDKのバージョンを変えたときの「+」連結/StringBuffer/StringBuilderの速度の違いをざっと調べてみた。 平均値とか出すのが面倒だったので、測定は一…

標準入力から1行ずつ読み込んで数値解析して標準出力に吐き出す

唐突に、手元にある各言語で標準入力から1行ずつ読み込んで、行の先頭の数値として解析できる部分を数値に変換して標準出力に吐き出すプログラムを書いてみようと思ったメモ。 例えば、「+123i456」という行があったら、「+123」までが数値として解析できる(…

標準入力から1バイトずつ読み込んで、大文字小文字変換をして標準出力に吐き出すプログラムを書いてみる

唐突に、手元にある各言語で標準入力から1バイトずつ読み込んで、大文字小文字変換をしたうえで標準出力に吐き出すプログラムを書いてみようと思ったメモ。 大文字小文字判定等を行う関数をまじめに使った言語もあれば、正規表現に頼った言語もあったり、果…

各言語で標準入力から1バイトずつ読み込んで標準出力に吐き出すプログラムを書いてみる

唐突に、手元にある各言語で標準入力から1バイトずつ読み込んで標準出力にそのまま吐き出すプログラムを書いてみようと思ったメモ。 普段は使わない言語も混じっているが、まぁ気にしない。 環境 手元にあるものということで、環境は以下のものに限定する。 …

IntStreamで遊んでみた

暇だったので、Java 8から追加されたjava.util.stream.IntStreamでちょっと遊んでみた。 ちなみに、IntStreamはinterfaceであるが、ソースを見るとstaticメソッドの実装が書いてある。IntStream#ofとか。まぁそれは余談。 以下のようなソースで出力を見てい…

PHPの三項演算子の注意すべき挙動

PHPで以下のようなコードを書いていてしばらくはまっていたのでメモ。

Apache TikaのPDFファイルテキスト抽出で遊んでみる

今更ながらに「Apache Tika」というものの存在を知る‥PDFとかその他諸々のファイルのメタデータやテキストを抽出してくれる‥|Apache Tika https://t.co/CsCBY74ekK— HHeLiBeX (@hhelibex) 2017年2月27日 ということで、サイトのParser APIを追いかけてコー…

シフト演算とMath.pow(2, n)と(+Math.pow(2, n)の怪)

自分が時々やらかしてしまうのでメモ。 環境は、CentOS 7(VM)上のOpenJDK 1.8.0_111。 2のべき乗(整数値)が欲しい場合はシフト演算 2のべき乗(整数値)が欲しいときに時々やらかしてしまうのが、以下のようなコードを書いてしまうこと。 for (int i = 0; i < …

rangeによるrangeの違い

Pythonのコードをちゃんと書いたことはないのだけど、ある理由でPythonのコードを読んでいて、ふと気になって調べたメモ。 結論から言うと、rangeで範囲を指定したときに列挙される値が、プログラム言語や、同じ言語でも書き方によって違うのだな、と。 実行…

QueueやStackとして使うなら‥LinkedList vs ArrayDeque

頭がJava 1.4で止まっているプログラマの呟き(謎)‥ LinkedListをQueueとして使ったあるプログラム(何)を書いていて、QueueやStackとして使うならLinkedListよりArrayDequeがお勧めとアドバイスをもらったので、軽く検証してみた。 事前準備 ソースコードは以…

参照はあいまい

いわゆるJavaの初心者がどつぼにはまりがちな、「参照はあいまい」と言われて戸惑うケース。(NGコード) package t2014_1008_01; import java.util.*; import java.sql.*; public class Main { public static void main(String[] args) { Date now = new Date…

SQLExceptionから取得できるSQLSTATEとエラーコード

ふとjava.sql.SQLExceptionのJavaDocを見ていたら、SQLSTATEとベンダー固有のエラーコードを取得できることに(いまさら)気づいた。 ベンダー固有のエラーコードはログに吐き出すくらいしか用途を思いつかないが、SQLSTATEはある程度規格化されているはずなの…

JavaプログラムからMySQLに4バイトのUTF-8文字を放り込んでみる

前の記事で、PHPプログラムからMySQLに4バイトのUTF-8文字を放り込んでみた。 MySQLで4バイトのUTF-8文字を扱ってみる - HHeLiBeXの日記 正道編 ついでなので、Javaプログラムの場合はどうなるのかを調べてみた。 例のごとく、「𠮟」と書かれた部分は「叱」…

短縮URLの展開処理を各言語で書いてみた

別にぜんぜんなんてことはないのだけど、なんとなく(謎)。 展開処理とは言っても、リクエストを出してLocationヘッダの内容を取っているだけだけど。 Java java.net.HttpURLConnectionクラスを使用して、こんな感じで。 import java.io.IOException; import …

AutoCommitの動作を誤解していた訳

以下の続き。 SET AUTOCOMMIT=0後の動作を誤解していたらしいの巻 - HHeLiBeXの日記 正道編 そもそもJDBCでは、トランザクション処理を書くときに、次のいずれかの書き方をすることになる: // TODO エラー処理 Connection connection = DriverManager.getCo…

イテレーションの最中に要素を削除する

Javaで次のようなプログラム: Map<String, String> map = new HashMap<String, String>(); map.put("a", "A"); map.put("b", "B"); map.put("c", "C"); for (String key : map.keySet()) { if (key.equals("b")) { map.remove(key); } } を書くと、java.util.ConcurrentModificationException</string,></string,>…

FrontBaseを入れてみた

何がきっかけだったかすっかり忘れてしまったのだが(と言いかけて、PHPのオンラインドキュメントを眺めていたら存在を知ったということを思い出したらしい)、FrontBaseというRDBMSの存在を知ったので、実際に導入してみた。その際の手順メモ。 FrontBase イ…

列名を持たない列の列名(意味不明)

なんと言えばいいのか分からなかったので意味不明なタイトルになったが、要は次のようなクエリを実行したときの結果表の列名はどうなるのか、ということ。 SELECT COUNT(*) FROM hoge ということで、一通り調べてみた。 次のテーブルを前提とする。 CREATE T…

ISBNをチェックするユーティリティ

唐突に、いつかどこかで役に立つかなぁ、と思い、持てる力(何)をいろいろ出してユーティリティを書いてみた。 アルゴリズムはWikipedia(ISBN - Wikipedia)を参考にした。 Java版 多少のブランクはあってもやはり私のプライマリ言語ということでまず最初に。 …

大昔に修正されたタイムゾーン関連のバグ

ある人(誰)から、Windows Server 2008でタイムゾーン関連のバグがあるという話を聞いた。発生するのが「J2SDK 1.4.2_14 b01以前」ということでえらい昔の話なのだが、ニッチな問題が好きな自分としては実際に動かして確認しないわけにはいかない(謎)というこ…

「f(n+1)=f(n)の各桁の二乗の和」という数列

某番組で次のような問題が出されていた。 次の○に入る数字は何か? 4→16→37→58→89→145→42→○→4 で、求め方はタイトルのとおりなのだが、任意の数字に対して数列を作ってみようと思い立って、次のようなプログラムを作成。 import java.util.ArrayList; import…

JavaFXで遊んでみる

次の記事を何気なく眺めていて、唐突にJavaFXに触れてみようと思ったらしい。 Java技術最前線 - 「詳説JavaFX」第1回 JavaFXとは:ITpro Java技術最前線 - 「詳説JavaFX」第2回 JavaFXでHello, World!:ITpro この記事ではJavaFX 1.3+NetBeans 6.9betaを使…

NetBeansを使ってJMSで遊んでみる

今からでも遅くないらしいので、JMS(Java Message Service)で遊んでみた。 今からでも遅くない JMSを学ぼう!(前編) 非同期通信の世界へようこそ (1/6):CodeZine 今回は、以下を動かしてみた。 この記事にサンプルが載っている「Point-to-Pointメッセージ…

NetBeans 6.7.1 for WindowsでのJDKの切り替え

とある事情で、NetBeansが使用するJDKを切り替えたかったのだが、Eclipseほど簡単にはいかないようだったので全部探した。 また探すのはいやなので、編集したファイルをメモ。 環境 NetBeans 6.7.1 OS: Windows Vista Business SP1 編集したファイル E:\Prog…

ビット演算子

なぜか唐突に、ビット演算子で「0xaaaaaaaa」と「0x2aaaaaaa」をシフトしてみようと思ったらしい。 public class Main { public static void main(String[] args) { int[] nums = { 0xaaaaaaaa, 0x2aaaaaaa, }; for (int n : nums) { System.out.printf("===…

BufferedReaderとLineNumberReader

BufferedReader#readLine() で実装されている、入力を行に分割するアルゴリズムを再利用する手立てはないものか、と調べていたら、LineNumberReader#read() が使えそうということに。 Read a single character. Line terminators are compressed into single…

Simpleライブラリの検証(6)

ざっくりと試してみたSimpleライブラリ。 Simpleライブラリを試してみる - HHeLiBeXの日記 正道編 いろいろと気になる点もあったので、ざくっと検証してみる。の続き。 全プリミティブ型とその配列をシリアライズしてみる いまさらだが、まぁ、基本というこ…