文字列
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("&", "&")
.Replace(" ", " ")
.Replace("<br />", Environment.NewLine);
var result = new StringBuilder(str) //遅い
.Replace("&", "&")
.Replace(" ", " ")
.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