文字列

Java

★型変換

String str = String.valueOf(num);

int num = Integer.parseInt(str);

char[] chars = { 'a', 'b', 'c', 'd' };

String str = new String(chars);

String str = String.valueOf(chars);

String str = String.copyValueOf(chars);

char[] chars = "abcd".toCharArray();

byte[] bytes = { 'a', 'b', 'c', 'd' };

String str = new String(bytes);

String str = String.valueOf(bytes);

byte[] bytes = "abcd".getBytes();

double d = (double)4/7;

DecimalFormat df = new DecimalFormat("#0.00");

System.out.println(df.format(d)); // 0.57

df = new DecimalFormat("#.00%");

System.out.println(df.format(d)); // 57.14%

String ⇒ Date

SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");

Date date = sf.parse("2013-3-17");

String str = "Sep 15, 2013";

Date date = new SimpleDateFormat("MMMM d, yy", Locale.ENGLISH).parse(str);

Date ⇒ String

SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String date = sf.format(new Date());

★replaceとreplaceAll

assertTrue( "ABA".replaceAll("A", "").equals("B") ); 〇

assertTrue( "$B$".replaceAll("$", "").equals("B") ); ×

replaceAll 正規表現を含む

replaceAll("a|b", "x") // aとb⇒x

replaceAll("[\r\n]", "") // 改行を除く

replaceAll("\\d", "*")

replaceAll("[a-zA-Z]", "?")

replace replaceAllの簡易版

String str = "abc";

// str.replace('b', '5'); × Stringオブジェクトは不変のため

str = str.replace('b', '5');

★String, StringBuffer, StringBuilder

・String 変化が少ない 応用:定数

・StringBuffer 頻繁に変化、マルチスレッド環境(同期) 応用:XML解析、HTTP解析

・StringBuilder 頻繁に変化、シングルスレッド環境(非同期) 応用:SQL文の組立、JSON作成

StringBuilder()

StringBuilder(int capacity)

StringBuilder(String str)

StringBuilder append(String str)

int capacity()

StringBuilder delete(int start, int end)

StringBuilder replace(int start, int end, String str)

StringBuilder insert(int offset, String str)

★+, concat, append

速度:+ < concat < append

★ソート

String[] strs = {"A", "C", "B"};

Arrays.sort(strs); 英語

Arrays.sort(strs, Collator.getInstance(Locale.JAPAN)); 英語以外

★改行コード

Unix/Linux/Mac OS X以降 LF(\n)

Windows CRLF(\r\n)

Mac OS 9 CR(\r)

※ダウンロードCSVファイルの改行コードはCRLFを固定で出力する必要がある

★String操作

int length()

char charAt(int index)

"abc".charAt(2) // c

String substring(int beginIndex, [int endIndex])

int indexOf(String str, [int fromIndex])

"abcabc".indexOf('c') // 2 見つからない場合は-1

"abcabc".indexOf('b',3) // 4

int lastIndexOf(String str, [int fromIndex])

String replace(char oldChar, char newChar)

String toUpperCase()

String toLowerCase()

String trim()

String[] split(String regex)

"xxx".contains("java")

"xxx".isEmpty()

"xxx".startsWith("java")

"xxx".endsWith("java")

"abc123".matches("[a-zA-Z]+")

"abc".equals("ABC")

"abc".equalsIgnoreCase("ABC")

"abc".compareTo("acc")

String[] strArray = str.split("\\s+");

// \s: " ", "\t", "\r", "\n".

※ロケールを注意

str.toUpperCase(Locale.ENGLISH);

或いは

Locale.setDefault(Locale.ENGLISH);

str.toUpperCase();

public static boolean isAllUpperCase(String str){

for(int i=0; i<str.length(); i++){

char c = str.charAt(i);

//java.lang.Character#isUpperCase(), isLetter()

if(c >= 97 && c <= 122) {

return false;

}

}

return true;

}

"abc".equalsIgnoreCase("ABC")

"abc".compareToIgnoreCase("ABC") == 0

// 特定の文字(列)を2つ以上含む

char cm = ',';

String str = "a,b,c";

str.indexOf(cm) != str.lastIndexOf(cm)

Arrays.asList("aaa", "bbb", "ccc").contains("bbb")

★出力フォーマット

String.format("%04d", 123); // 0123

★全角半角変換(Unicode正規化)

Normalizer.normalize("abc123", Form.NFKC).equals("abc123")

Normalizer.normalize("ガ", Form.NFKC).equals("ガ")

C#

★Split

string[] results = str.Split(new[] { ',' });

string[] results = str.Split(','); //C#4.0以上

string[] results = str.Split(new[] { ',', ' ' });

string[] results = str.Split(',', ' '); //C#4.0以上

string[] results = str.Split(new[] { "##" }, StringSplitOptions.None);

※charの場合はStringSplitOptions設定が不要、stringの場合は必要

//サイズ制限

string[] results = str.Split(new[] { ',' }, 2, StringSplitOptions.None);

★Join

対象:int[], DateTime[], double[], IEnumerable<T>, object[], string[] (ToString()を呼ぶ)

string[] parts = {...};

var result = string.Join(",", parts);

var result = string.Join(",", Enumerable.Range(1, 10));

var result = string.Join("-", new object[] { 10, 3.14, DateTime.Now });

★Substring vs Remove

//最初10文字を取得

var result = str.Substring(0, 10);

var result = str.Remove(10); //〇

//最後10文字を取得

var result = str.Substring(str.Length - 10); //〇

var result = str.Remove(0, str.Length - 10);

//10目文字から長さ10を取得

var result = str.Substring(10, 10); //〇

var result = str.Remove(20).Remove(0, 10);

//10目文字から長さ10を削除

var result = str.Substring(0, 10) + str.Substring(20);

var result = str.Remove(10, 10); //〇

★Replace

var result = str.Replace("aaa", "bbb");

var result = str.Replace(' ', '|');

var result = str.Replace("the ", string.Empty);

var result = str.Replace("&amp;", "&")

.Replace("&nbsp;", " ")

.Replace("<br />", Environment.NewLine);

var result = new StringBuilder(str) //遅い

.Replace("&amp;", "&")

.Replace("&nbsp;", " ")

.Replace("<br />", Environment.NewLine)

.ToString();

★文字列検索

効率降順

方法1

row.IndexOf(pattern, StringComparison.Ordinal) > -1

row.IndexOf(pattern, StringComparison.Ordinal) >= 0

方法2

row.Contains(pattern) 推薦

※中身:return (this.IndexOf(value, StringComparison.Ordinal) >= 0);

方法3

var regex = new Regex(pattern, RegexOptions.Compiled);

regex.IsMatch(row);

方法4

var regex = new Regex(pattern);

regex.IsMatch(row);

方法5

Regex.IsMatch(row, pattern)

方法6

row.IndexOf(pattern) > -1

row.IndexOf(pattern) >= 0

※デフォルト:StringComparison.CurrentCulture