※ 4/9 11:25 いろいろ計測しなおしてます。こちらも参照 Javaで文字列連結する場合には+演算子よりもStringBuilderを使うべき、という話があるのですが、よく sb.append("[" + data + "]"); みたいなコードをみかけて、あんまり意味ないなーと思ったりします。 あと、 sb.append("title:"); sb.append("[" + data + "]"); みたいに、+演算子を使った一行の式にして sb = "title:" + "[" + data + "]"; としておけば「title:」と「[」はコンパイル時点で最適化されたのに、ってコードもあります。 ということでTwitterで Javaでの文字列連結は+を使うべき、ってやったほうが、StringBuilder使ったsb.append("[" + data + "]")みたいなク
コンピュータが苦手なSEが日々記すメモです。 いつか誰かのお役に立てれば幸いです。 ※このブログ記載の内容をご利用になる場合は、自己責任でお願いします。何が起こっても一切責任は持てませんm(__)m String#valueOf(Object obj)って、nullが入ればNullPointerExceptionでも投げてくれるものだと思っていました。 結果: String value = String.valueOf(null) System.out.println(value) -> 「null」と出力される System.out.println(value.length()) -> 「4」と出力される String.valueOfにnullを入れると、文字列"null"扱いになるとは… 確かにJavaDocに以下のような記述が。 ***************************
先日、ついに JavaSE 7 がリリースされました! そこで、早速ダウンロードして、Java7 のソースコード(src.zip)を Java6と比較してみたところ、公表はされていないのですが、ちょこちょことリファクタリングされていることがわかりました。 そこで、そのうち String クラスについて調べてみました。 splitメソッド - 独自処理による高速化 いままでは、String#split(〜) は正規表現 (Patternクラス) に処理を移譲するだけでした。 // (Java6) Stringクラス、2291行目〜 public String[] split(String regex, int limit) { return Pattern.compile(regex).split(this, limit); } それが、単純な区切り文字なら正規表現を使わないで独自に処理をす
ここでは、アンドロイド・プログラミングについてのちょっとした短いトピックをとりあげる。 今後、何かちょっとした面白いトピックがあれば、この記事に随時追加していきたい。 タイトルバーを表示しない。 アクティビティのタイトルバーを表示しないようにするには、 requestWindowFeature(Window.FEATURE_NO_TITLE)を実行する。 注意する点は、setContentViewメソッドを実行する前でないと効果がない。 以下にサンプルプログラムを示す。 このプログラムを実行すると、以下のようにタイトルバーの無い画面が表示される。 「CharSequence」ってなに? アンドロイドのプログラムをみていると、時々CharSequenceという型が出てくる。 初めてみたときは、これって何だろうと思ってしまった。 CharSequenceはアンドロイド固有のクラスではなく、もと
※コメントでご指摘いただきましたが、コンパイラによる最適化には適用されるケースと適用されないケースがあります。 全然昔の知識ではないです。サンプルがたまたま最適化されるケースだっただけです。最適化が適用されるのはループ内とか一部だけです。ループ外にString変数を用意して、この変数に文字列結合すれば悲惨なことになります。 こちらの記事を読んで誤解して、StringBuilderを使わず被害を受けた人を何人か見かけたので、できれば下記URLなどを見て訂正をしてもらいたいところです。 http://www.pellegrino.link/2015/08/22/string-concatenation-with-java-8.html この点において、まるですべての状況において+結合は問題ない、と受け取られるように書いてしまっていました。迷惑をおかけした方々には深くお詫び申し上げます。 執筆時
jdkのライブラリは全体的に「簡単に作り出せるものは提供しない」という姿勢のようです。 質問の内容の処理は簡単に作り出せるので、提供されていないのでしょう。 とはいえ車輪の再開発は避けたいもの。ちゃんとサードパーティが提供しています。 jakarta projectのcommons.lang.StringUtilsのjoin(Object[] array, char separator)がお望みのものに近いです。 他にもjakarta projectには便利なライブラリが多いので、いろいろ調べてみてください。 ja-jakartaにいくつかは日本語訳されていますが、commonsはシンプルなので英語のjavadocでも十分に内容が分かると思います。
空の文字列とnullと""の関係について説明します。空の文字列は文字数が0である文字列を指し、""は空の文字列の表現方法の一つです。一方、nullは値が存在しないことを表す特殊な値です。つまり、""とnullは異なる概念です。TextFieldなどの要素に対して、tf.getText()==""かtf.getText()==nullで判定することはできますが、tf.getText().length()==0と比較する方法も使用できます。 空の文字列とは、文字数が0である文字列を指します。空の文字列は""と表現されることが一般的ですが、""以外の表現方法も存在します。一方、nullは、値が存在しないことを表す特殊な値です。つまり、空の文字列とnullは異なる概念です。 空の文字列とは、文字数が0である文字列を指します。一般的には、空の文字列は""と表現されますが、""以外の表現方法もあります
「Twitter時代の文字の数え方」という記事で書いたことですが、「文字列を扱う」というよくあるタスクは、プログラミング言語によって扱いやすさがまったく異なります。Javaには不幸な呪いがかかっていて、そのうち、「文字列操作に関しては、例えば、Javaを避ける」と言われるようになるのではないかと心配しています。 「文字列中の文字を、1行に1文字ずつ表示する」という例題を考えましょう。 注意:話を単純にするために、Unicodeのコードポイント1つ分のことを「1文字」と呼んでいます。複数のコードポイントで文字を構成することもあるので、ほんとうはもっと複雑です。 次のような解答に、文句をつけられるものでしょうか。 String str="文字列"; int size = str.length(); for (int i = 0; i < size; i++) { System.out.prin
下記マルチタイムフレーム移動平均線のソースコード、①~③に対応するにはコードをどのように変更するのか、プログラムに詳しい方教えてください。 ①M1~MN(M1チャートを表示した際、最大9本表示)に対応 ②時間軸を切り替えた際に下位足は表示しない(下記プログラム通り、表示している時間軸については通常の移動平均線を表示) ③精度(いろいろなサイトのものを使ってみると変に反応して曲がったままになり、一度時間軸を変更してまた時間軸を戻すということをしなければいけないものがあるため) #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 //parameters input ENUM_TIM
Javaで正規表現を活用する(java.util.regexパッケージ):JavaTips ~Javaプログラミング編 PerlやUNIXのgrepなどで欠かせない正規表現ですが、Javaでもこれを扱うためのパッケージjava.util.regexがJ2SE1.4からコアAPIに導入されました。ここでは、正規表現自体の詳細には触れず、クラスとそのメソッドの使い方についてのみ言及することにします。 まずは、具体的なサンプルを見てみましょう。サンプルは以下のような処理を行っています。 「javaまたはclassという拡張子が付いたファイル名を表す正規表現」と、入力文字列全体がマッチするかを「matches(マッチ)」によって調べる 入力文字列に正規表現にマッチする部分文字列があるかどうかを「find(検索)」により調べる 存在した場合には「group, start, endの各メソッドによって
何度か書いているけど、整理的な意味で。今後は「このエントリ参照」にするつもりで書いてみる。 文字列連結から見るシステム内で扱う型について - 日々常々 Javaプログラマであるかを見分ける10の質問 に答えてみる - 日々常々 String の連結ネタの続き - 日々常々 前書き Stringなんてboxed primitive*1でもないただのクラスのくせに、中途半端に贔屓されて*2てムカつく*3し、その中途半端ぶり*4がなお腹立たしい……。そして +演算子 で連結して問題が起こるような状況、つまりそんな長々と文字列連結したいような場合は、きっと他の適した型がある。StringBuilderじゃなく、もっと別の何か。業務要件で文字列を組み立てる目的を考えれば、たぶんテンプレート的なものに落ち着くんじゃ無かろうか。ライブラリ的な所でなら逐次書き出し等になるような。どちらにせよ文字列の組み立
知ってる人にとっては何をいまさらって感じなんでしょうけど、はまってしまいました。 JavaのString.splitは、limit引数をつけないと、最後の空文字をとります。 http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split(java.lang.String,%20int) new String("a,b,c,,,").split(",") の結果は、 {"a", "b", "c"} {"a", "b", "c", "", "", ""} を取るには、以下のように、-1をつける必要があります。 new String("a,b,c,,,").split("," , -1) APIドキュメントには、-2とかいう変な数値で例がありますが、基本的に-1でも-2でも負の数値なら同じ。最初に読んだときは意味がわからず、
J2SEに含まれるクラスのひとつ。パッケージも含めたクラス名はjava.util.ResourceBundle。 リソースバンドルを使用するためのクラス。 ResourceBundleクラスのgetBundle()メソッドで「プロパティファイル名」を指定することで、クラスファイルと同じディレクトリに置いてあるプロパティファイルの中から、適切なロケールのファイルを探し出して取得する。 実際の値の取得は、getString()メソッドでキーを指定することで取得する。 厳密には、ResourceBundleはプロパティファイル「も」取得できるクラスであり、プロパティファイル専用のクラスではない。が、実際にはプロパティファイルを取得する場合によく使われる。 // Sample.java import java.util.ResourceBundle; public class Sample { p
JavaScriptのreplace関数は // 各数字を2倍に置換する "12345".replace(/\d/g, function(str) { return parseInt(str, 10) * 2; }); // => "246810"のように、関数を使って置換文字列を作ることができるのがうれしい。これをJavaでもできないだろうか。 まず、Matcherクラス に用意されている機能を使った簡単な実装から。 package example; import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; public final class RegexUtils { public static interface Replacement { S
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く