プログラム言語 標準関数(テキスト系)

入出力

入力

標準入力(StandardInの略)値を取得
my $str =

my @str = ();
for my $inpcnt (0..2){
 $str[$inpcnt] = ;
 chomp $str[$inpcnt];
}

出力

using System.Windows.Forms;

※メッセージのみ
MessageBox.Show(text: “Hello”);

※+キャプション(Window上部)
MessageBox.Show(
  text: “Hello”,
  caption: “caption”);

※+ボタン
MessageBox.Show(
  text: “Hello”,
  caption: “caption”,
  buttons:MessageBoxButtons.YesNoCancel);

MessageBoxButtons列挙体メンバー一覧
OK
「OK」ボタンのみ。
OKCancel
「OK」/「キャンセル」ボタン。
AbortRetryIgnore
「中止」/「再試行」/「無視」ボタン。メッセージボックスの閉じるボタンが無効。
YesNoCancel
「はい」/「いいえ」/「キャンセル」ボタン。
YesNo
「はい」/「いいえ」ボタン。メッセージボックスの閉じるボタンが無効。
RetryCancel
「再試行」/「キャンセル」ボタン。

※ボタン操作結果を取得
DialogResult answer = MessageBox.Show(text: “Hello”,
  caption: “caption”,
  buttons:MessageBoxButtons.YesNoCancel);

if (answer == DialogResult.Yes)
{
  ~
}

※+アイコン
MessageBox.Show(text: “Hello”,
  caption: “caption”,
  buttons: MessageBoxButtons.YesNoCancel,
  icon:MessageBoxIcon.Information);

MessageBoxIcon列挙体メンバ一覧
None
アイコンなし
音:一般警告音

Hand
赤丸に白いX(停止マーク)。
音:システムエラー

Question
丸い吹き出しに疑問符記号。
音:メッセージ(問い合わせ)

Exclamation
黄色い三角に感嘆符記号。
音:メッセージ(警告)

Asterisk
丸い吹き出しに「i」。
音:メッセージ(情報)

Stop
Handと同じ。
Error
Handと同じ。
Warning
Exclamationと同じ。
Information
Asteriskと同じ。

テキスト操作

型変換

プログラム言語 データ型:型情報」参照

StringBulder

String型の変数にリテラルを格納する場合、
変数、リテラル両方のメモリ領域を必要とする。
変数に別のリテラルを格納する為には更に別のリテラル用のメモリ領域も必要で非効率。
String s;
s = "aaa"
s = "bbb"
※"aaa" と "bbb" は別のメモリ領域
※"aaa" はどこからも参照される事なく無駄に残り続ける。

メモリに関して効率良く文字列を管理する為のクラスがStringBuilder
内部ではchar型配列の組み合わせを外部からはString型の様に利用できる。
String型の値を頻繁に書き換える必要がある場合に使用。

StringBuilder sb = new StringBuilder("aa");
sb : aa
sb.toString() : aa
sb.capacity() : 18;
//16文字分の配列のバッファ + aa(2文字)分の配列のバッファ

sb.append("bb");
// sb : aabb

sb.append("cc");
// sb : aabbcc

sb.insert(2, "dd");
// index : 0a1a2b3b4c5c6
// sb : aaddbbcc

sb.delete(4, 6);
// index : 0a1a2d3d4b5b6c7c8
// sb : aaddcc

sb.deleteCharAt(0);
sb.deleteCharAt(0);
// sb : ddcc

sb.reverse();
// sb : ccdd

sb.replace(1,3, "zz");
// sb : czzd

//メソッドチェーンによる記述も可
sb.append("cc").insert(0, "ee");

複写

#include

using namespace std;

char c[50];

要素数が定義されている文字配列にコピー
strcpy_s(c, 50, "VisualC++");
cout << c << '\n'; →VisualC++

↓ も可(要素数省略)
strcpy_s(c, "VisualC++");
cout << c << '\n'; →VisualC++

char *myStr = "VisualC++";
char c[50];

strcpy_s(c, 50, myStr);
cout << c << '\n'; →VisualC++

char c*;

strcpy_s(c, "VisualC++");
→コンパイルエラー

strcpy_s(c, ?, myStr);
コピー先のサイズが未定の為

char temp[50] = "VisualC++";
char *c = temp;

strcpy_s(c, 50, "VisualC++");
cout << c << '\n'; →VisualC++
要素数が固定されているので○

指定の文字数分のみ複写
文字配列に対してのみ複写可能(ポインタ不可)
char before[] = "VisualC++";
char after[10];

strncpy_s(after, before, 3);
cout << after << '\n'; →Vis

strncpy_s(after, before, _countof(after)-1);
cout << after << '\n'; →VisualC++

strncpy_s(after, before, 20);
→実行時エラー

ポインタに複写は不可
char *before = "VisualC++";
char *after = " ";
strncpy_s(after, before, 5);
→コンパイルエラー

char *before = "VisualC++";
char temp[10];
char *after = temp;
strncpy_s(after, before, 5);
→コンパイルエラー

追加(結合)

string newStr = string.Concat(@"AAA", @"BBB", @"CCC");
newStr:AAABBBCCC

int a = 123;
string b = @"BBB";
string c = @"CCC";
string str = string.Join(",", a, b, c);
str:123,BBB,CCC

比較

String型は基本型ではなく、参照型。
(「プログラム言語 変数/データ型」参照)

string s1 = "TEST";
string s2 = "TEST";
"TEST" というリテラルがメモリ領域に作成され、
s1、s2ともそこを参照する。

// 参照値の比較
bool ret1 = (s1 == s2);
⇒ ret1 : true
// 文字列の比較
bool ret2 = s1.Equals(s2);
⇒ ret2 : true

string s3 = new string ("TEST");
string s4 = new string ("TEST");
"TEST" というリテラルが2つメモリ領域に作成され、
s1、s2それぞれ別のメモリ領域を参照する。

// 参照値の比較
bool ret3 = (s3 == s4);
⇒ ret3 : false

// 文字列の比較
bool ret4 = s3.Equals(s4);
⇒ ret4 : true

検索(判定・位置)

bool = "12345".Contains("12");
bool:true

bool ret = "12345".All(x => x == 'x');
ret : false

string s = "123456789";
int index = s.indexOf("1");
⇒ index : 0

int index = s.indexOf("2");
⇒ index : 1

int index = s.indexOf("0");
⇒ index : -1

置換

String before = "abcde";
String after = before.Replace(oldValue:"c", newValue:"");
⇒ after : abde

トリム

console.log(" aaa ".trim())
→aaa

大小文字変換

大文字変換
UCase(~)

小文字変換
LCase(~)

切り出し

const string CONST_STRING = "abcdefghijklmn";

string str1 = CONST_STRING.Substring(3,3);
⇒str1:def

※× substring(開始位置, 終了位置)ではない。JAVAとは違う。
※○ substring(開始位置, 文字数)

文字数

char myChar1[] = "VisualC++";
char *myChar2 = "VisualC#";

int elmCnt;
elmCnt = strlen(myChar1);
elmCnt:9
終端文字(\0)は含まない

elmCnt = strlen(myChar2);
ポインタOK
elmCnt:8
終端文字(\0)は含まない

バイト数

int i = "ア".getBytes(Charset.forName("UTF-8")).length;
→3
int i = "ア".getBytes(Charset.forName("Shift-JIS")).length;
→2
int i = "ア".getBytes(Charset.forName("UTF-8")).length;
→2
int i = "ア".getBytes(Charset.forName("Shift-JIS")).length;
→1

int i = "ア".getBytes().length;
→?
実行環境(Windows?Linux?)に影響される
Windows=Shift-Jis、Linux=UTF-8

Char型とString型

char[] myChar1 = new char[3];
myChar1[0] = '1';
myChar1[1] = '2';
myChar1[2] = '3';
//myChar[3] = '4'; はエラー

char[] myChar2 = {'1','2','3'};

char[] myChar3 = "123".ToCharArray();

int len = myChar1.Length;
//⇒len:3
int number = (int)myChar1[0];
//⇒number:49(文字コード)
char myChar = (char)number;
//⇒myChar:'1'
string myString = myChar.ToString();
//⇒myString:"1"

バインド(埋め込み)

{0}、{1}に対して値を指定する
string disp1 = string.Format("aaaa{0}aaa{1}aaa{2}", myChar1[0] , myChar1[1] , myChar1[2]);
⇒disp1 : "aaaa1aaa2aaa2"

0埋め

string disp2 = "55".PadLeft(5, '0');
disp2:55000
string disp3 = "55".PadRight(5, ' ');
disp2:  55

通常の{0}、{1} に加え、書式:xxxxxを指定する
string disp4 = String.Format("{0:00000}", 55);
⇒disp4 : "00055"

小数点桁指定

//小数点桁指定
string disp5 = String.Format("{0:0.00000}", 55.123);
//⇒disp5 : "55.12300"

//小数点桁指定&0埋め
string disp6 = String.Format("{0:000.00000}", 12.345);
//⇒disp6 : "012.34500"

桁区切り

//カンマ区切り
string disp7 = String.Format("{0:#,#}", 123456789);
//⇒disp7 : 123,456,789

//カンマ区切り&小数点桁指定
string disp8 = String.Format("{0:#,#.00}", 12345.6);
//⇒disp8 : 12,345.60

Null

Null判定
bool ret;

ret = string.IsNullOrWhiteSpace(value: @"AAA");
ret:false
ret = string.IsNullOrWhiteSpace(value: @" ");
ret:true
ret = string.IsNullOrWhiteSpace(value: @"");
ret:true
ret = string.IsNullOrWhiteSpace(value: null);
ret:true

ret = string.IsNullOrEmpty(value: @"AAA");
ret:false
ret = string.IsNullOrEmpty(value: @" ");
ret:false
ret = string.IsNullOrEmpty(value: @"");
ret:true
ret = string.IsNullOrEmpty(value: null);
ret:true

置換