文字列関係

円マークの罠

長年この業界にいるが、utf-8に円マークを表す文字コードが2つあることを初めて知った。 0x5Cと0xA5。 0x5Cの方はバックスラッシュに割り当てられているが、表示上だけ円マークになってるんだとか。 今までバックスラッシュと円マークが同じコードだと思って…

StringUtils#abbreviate

仕事でcommons-langライブラリのソースを見る機会があり、ちょっとメソッドの挙動に疑問を持つ。 javadocの使用例は下記のようになっている。 StringUtils.abbreviate("abcdefghijklmno", 0, 10) = "abcdefg..." StringUtils.abbreviate("abcdefghijklmno", …

NumberStringComparator

ありがちと言えばありがち。 文字列を数値としてソートするためのComparator。 import java.math.BigDecimal; import java.util.Comparator; public class NumberStringComparator implements Comparator<String> { @Override public int compare(String o1, String </string>…

indexAny

文字列の中から複数のcharのうち、最初に出現する位置を返す。 実際の使いどころはというと、位置を知りたいのではなく、単に文字列の中にあるかどうかを知りたいだけだったりする。 public static int indexAny(String text, char[] ca) { int ret = -1; fo…

countChar

文字の数を数える。 csvの処理で引用符の数を数えるのに使った。 public static int countChar(String text, char c) { if (text == null) { return 0; } int ret = 0; for (int i = 0; i < text.length(); i++) { if (text.charAt(i) == c) { ret++; } } re…

repeat

一つの文字を指定数続けた文字列を返す。 public static String repeat(char c, int count) { char[] ret = new char[count]; Arrays.fill(ret, c); return String.valueOf(ret); }

leftBytes

文字から指定したバイト数の文字を切り出す。 マルチバイト文字の途中のバイトでは切らない。System.out.println(leftBytes("あいうえお", 3)); => "あ" public static String leftBytes(String text, int bytes) { // file.encodingというプロパティは環境…

join

今日はsplitの反対。 なぜにコアAPIにないのかと大勢の人が思っているであろう機能。 配列を結合して一つの文字列にする。 public static String join(String[] tokens, char delimiter, char quote, boolean allQuote) { if (tokens == null) { return ""; …

split

今日からは、今までに自作したユーティリティ的なメソッドやクラスを載せていく。 自分の備忘録としてね。 今日は、String#split()もどき。 用途としては、引用符内の区切り文字を無視したいときに使う。 作ったきっかけは、コマンドラインアプリケーション…