トップ 差分 一覧 ソース 置換 検索 ヘルプ PDF RSS ログイン

文字列操作

http://www.ne.jp/asahi/hishidama/home/tech/lang/string.html
  MSX-BASIC VBA VBS VB.NET PASCAL PL/I Perl C言語 VC++(MFC) Java JavaScript C#(.NET) SQL(Oracle) PL/SQL(Oracle) Lisp
変数の末尾に「$
又はDEFSTR
String
「String * 長さ」で固定長文字列
String String array[1..n] of char CHAR なし char[] CString String String string CHAR
VARCHAR2
CLOB
CHAR
VARCHAR2
CLOB
string
(vector character)と同じ
StringBuffer StringBuilder
制限 256文字以内?       文字列定数を代入する際には、配列数が一致している必要がある。 変数定義時に長さ指定   変数定義時に長さ指定
文字列の末尾には暗黙に'\0'が存在するので、その1バイトもカウントする必要あり
  内部ではUNICODEで処理される     型とバージョンによって最大長が異なる 型とバージョンによって最大長が異なる  
定数の例 "abc" "あいう" "あいう" "あいう" 'abc' 'ABC' 'あいう'
"あいう"
q/あいう/
qq/あいう/

「'」は中身そのまま、「"」だと中の変数等を展開する
"あいう" "あいう" "あいう" "あいう" "あいう"
@"あいう"
…@を付けると、\がエスケープ文字でなくなる
'あいう' 'あいう' "ABC"
CHR$(0) vbNullChar   ControlChars.NullChar       "\0" "\0" "\0"   "\0"      
"'"+CHR$(34) "'"""   "'" + ControlChars.Quote '''"'   q/'"/ "\'\"" "\'\"" "\'\"" "\'\"" "\'\""
@"'"""
'''"' '''"' "\'\""
CHR$(9)
TAB(8)
vbTab   ControlChars.Tab       "\t" "\t" "\t"   "\t"      
改行   vbNewLine   Environment.NewLine           System.getProperty("line.separator")   Environment.NewLine      
CHR$(13)+CHR$(10) vbCrLf vbCrLf       "\n" "\r\n"
"\n"
"\r\n"
"\n"
"\r\n"
"\n"
"\n"        
代入 S$="abc" Dim S As String
S="あいう"
Dim S
S = "あいう"
Dim S As String
S = "あいう"
var s:array[1..3] of char;
s:='abc'
DCL S CHAR(4);
S='ABC';
$s='あいう'; char s[16];
strcpy(s,"あいう");
CString s;
s="あいう";
String s;
s="あいう";
var s;
s="あいう";
var s=new String("あいう");
  S='あいう'
UPDATE文
S:='あいう';  
長さ LEN(A$) Len(S) Len(S)         strlen(s) s.GetLength() s.length() s.length s.Length LENGTH(S) LENGTH(S)  
  MSX-BASIC VBA VBS VB.NET PASCAL PL/I Perl C言語 VC++(MFC) Java JavaScript C#(.NET) SQL(Oracle) PL/SQL(Oracle) Lisp
比較 A$=B$ A=B         $a eq $b
($a cmp $b)==0
strcmp(a,b)==0 a==b
a.Compare(b)==0
a.equals(b) a==b string.compare(a,b)==0
a.compareTo(b)==0
A=B A=B (string= a b)
(char= 字 字)
A$<B$ A<B         $a lt $b strcmp(a,b)<0 a<b
a.Compare(b)<0
a.compareTo(b)<0 a<b string.compare(a,b)<0
a.compareTo(b)<0
A<B A<B (string< a b)
(char< 字 字)
なし StrComp(a,b,vbTextCompare)           strcmpi(a,b) a.CompareNoCase(b) a.compareToIgnoreCase(b)         (string-equal a b)
(string-not-equal a b)
(string-lessp a b)
(string-greaterp a b)
(string-not-lessp a b)
(char-equal 字 字)
結合 S$=S$+"def" S=S+"えお"
S=S &"えお"

「+」は、両方とも文字列でないと駄目。「&」は文字列に変換して結合してくれる。なお、変数の末尾と「&」をくっつけてはいけない(Longの変数だと勘違いされてしまう)
S = S &"えお" S = S + "えお"
S = S &"えお"
S += "えお"
S &= "えお"
  S=S||'DEF'; $s=$s . 'えお';
$s="$sえお";
strcat(s,"えお");
定数同士であれば、「"あい" "えお"」の様に文字列を並べるだけで結合される(コンパイル時)
s+="えお"; s+="えお"; s+="えお"; s+="えお"; S||'えお'
CONCAT(S,'えお)
S||'えお'
CONCAT(S,'えお)
 
抽出 M$=MID$(S$,3,1) M=Mid(S,3,1)→全角でも1文字としてカウント
M=MidB(S,3,1)→バイト列として扱う
M=Mid$(S,3,1)→文字列以外だとエラー
M = Mid(S,3,1)         strncpy(m,s+2,1); m=s.Mid(2,1); m=s.substring(2,2+1); m=s.substr(2,1);   SUBSTR(S,3,1) SUBSTR(S,3,1)  
左抽出 L$=LEFT$(A$,3) L=Left(S, 3)
L=LeftB(S, 3)
L=Left$(S, 3)
L = Left(S, 3)         strncpy(l,s,3); l=s.Left(3); m=s.substring(0,3); m=s.substring(0,3);   SUBSTR(S,1,3) SUBSTR(S,1,3)  
右抽出 R$=RIGHT$(A$,3) R=Right(S, 3)
R=RightB(S, 3)
R=Right$(S, 3)
R = Right(S, 3) R = Strings.Right$(S, 3)         r=s.Right(3); r=s.substring(s.length()-3,s.length()); r=s.substring(s.length-3,s.length);        
R$=MID$(A$,2) R=Mid(S, 2)           strcpy(r,s+1); r=s.Mid(1); r=s.substring(1); r=s.substring(1);        
  MSX-BASIC VBA VBS VB.NET PASCAL PL/I Perl C言語 VC++(MFC) Java JavaScript C#(.NET) SQL(Oracle) PL/SQL(Oracle) Lisp
同一文字複数 S$=STRING$(10,"A") S = String$(10, "A")
S = WorksheetFunction.Rept("A", 10)
S = String(10, "A")       $s = 'A' x 10;
$s = 'A'; $s x= 10;
memset(s, 'A', 10);
s[10] = '\0';
  char[] cs = new char[10];
Arrays.fill(cs, 'A');
s = new String(cs);
         
分割 なし   配列名 = Split(変数, "文字")       @配列名=split(/文字/,$変数); strtok     配列名=変数.split(文字);        
連結     変数 = Join(配列名, "文字")                        
空白除去 なし T = Trim(S) T = Trim(S)         なし   t=s.trim();   t=s.Trim(); TRIM(S) TRIM(S) (string-trim '(#\Space #\Tab #\Newline) s)
L = LTrim(S) L = LTrim(S) l=s.TrimLeft();   l=s.TrimStart(); LTRIM(S) LTRIM(S) (string-left-trim " " s)
R = RTrim(S) R = RTrim(S) r=s.TrimRight();   r=s.TrimEnd(); RTRIM(S) RTRIM(S) (string-right-trim " " s)
文字埋め RIGHT$(SPACE$(2)+S$,2)                     s.PadLeft(2, ' '); LPAD(S,2) LPAD(S,2)  
RIGHT$(STRING$(2,"0")+S$,2) s.PadLeft(2, '0'); LPAD(S,2,'0') LPAD(S,2,'0')
LEFT$(S$+STRING$(2,"0"),2)   RPAD(S,2,'0') RPAD(S,2,'0')
文字コード C$=CHR$(65) C = Chr(65) C = Chr(65) Dim C As Char = Convert.ToChar(65) chr(65)     char c=65; TCHAR c=65; char c=65;     CHR(65) CHR(65) (code-char 65)
N=ASC("A") N = Asc("A") N = Asc("A")
N = AscW("A") 'ユニコード
    char n='A'; TCHAR n='A'; char n='A'; var c='A'; ASCII('A') ASCII('A') (char-code #\A)
文字取得 C$=MID$(S$,N,1) C = Mid(S, 2, 1) C = Mid(S, 2, 1)     なし   char c=s[n]; TCHAR c=s.GetAt(n); char c=s.charAt(n); var c=s.charAt(n);
var n=s.charCodeAt(n);
      (char s n)
文字置換 MID$(S$,N,1)=C$ Mid(S, n, 1) = C       なし   s[n]=c; s.SetAt(n,c);            
文字検索 なし なし       なし   strchr(s,c)
strrchr(s,c)

見つけた位置のポインターを返す
s.Find(c)
s.ReverseFind(c)
s.indexOf(c)
s.lastIndexOf(c)
s.indexOf(c)
s.lastIndexOf(c)
       
検索 INSTR(S$,"cd") InStr(S, "cd")
InStrRev(S, "cd")
InStr(S, "cd")
InStrRev(S, "cd")
          s.Find("cd") s.indexOf("cd")
s.lastIndexOf("cd")
s.indexOf("cd")
s.lastIndexOf("cd")
  INSTR(S,'cd') INSTR(S,'cd')  
置換 MID$(S$,4,2)="zz" Mid(S, 4, 2) = "zz"           strncpy(s+3,"zz",2);              
なし R = Replace(S, "cd", "zz") R = Replace(S, "cd", "zz")       $_ = $s;
s/cd/zz/;
$r = $_;

$s =~ s/cd/zz/;
      r=s.replace("cd","zz");   TRANSLATE(S,'cd','zz') TRANSLATE(S,'cd','zz')  
  MSX-BASIC VBA VBS VB.NET PASCAL PL/I Perl C言語 VC++(MFC) Java JavaScript C#(.NET) SQL(Oracle) PL/SQL(Oracle) Lisp
文字判断               isalpha(字)             (alpha-char-p 字)
    isupper(字)
islower(字)
Character.isUpperCase(字)
Character.isLowerCase(字)
(upper-case-p 字)
(lower-case-p 字)
IsNumeric(S) IsNumeric(S) isdigit(字) Character.isDigit(字) (digit-char-p 字 10)
    isalnum(字)   (alphanumericp 字)
大小文字変換 なし L = LCase(S)
L = StrConv(S, vbLowerCase)
L = LCase(S)         strlwr(s);
c=tolower('A');
s.MakeLower(); l=s.toLowerCase(); l=s.toLowerCase();   LOWER(S) LOWER(S) (string-downcase s)
(char-downcase 字)
なし U = UCase(S)
U = StrConv(S, vbUpperCase)
U = UCase(S)         strupr(s);
c=toupper('a');
s.MakeUpper(); u=s.toUpperCase(); u=s.toUpperCase();   UPPER(S) UPPER(S) (string-upcase s)
(char-upcase 字)
数値変換 N=VAL("12") N = Val("12") N = CInt("12")         n=atoi("12");
sscanf("12","%d",&n);
  n=Integer.parseInt("12"); n=parseInt("12");
n="12" * 1;
n=parseFloat("12.3");
  TO_NUMBER('12') TO_NUMBER('12')  
N=VAL("&HC") N = Val("&HC")   Convert.ToInt32("C", 16)       sscanf("c","%x",&n);   parseInt("0xc")は駄目 n=parseInt("0xc");
n=eval("0xc");
       
十進文字変換 A$=STR$(12) S = Str(12)   Convert.ToString(12,  10)   DEFを使って同じエリアをPICとCHARに定義   itoa(12,s,10);
sprintf(s,"%d",12);
s.Format("%d",12); s=""+12;
s=String.valueOf(12);
s=Integer.toString(12);
s=new Integer(12).toString();
s=""+12;
s=new String(12);
  TO_CHAR(12) TO_CHAR(12) (format nil "~D" 12)
(format nil "~10R" 12)
二進 A$=BIN$(12) なし   Convert.ToString(12,  2)       itoa(12,s,2);   s=Integer.toBinaryString(12);
s=Integer.toString(12,2);
        (format nil "~B" 12)
八進 A$=OCT$(12) S = Oct(12) S = Oct(12) Convert.ToString(12,  8)       itoa(12,s,8);
sprintf(s,"%o",12);
s.Format("%o",12); s=Integer.toOctalString(12);
s=Integer.toString(12,8);
        (format nil "~O" 12)
十六進 A$=HEX$(12) S = Hex(12) S = Hex(12) Convert.ToString(12,  16)       itoa(12,s,16);
sprintf(s,"%x",12);
s.Format("%x",12); s=Integer.toHexString(12);
s=Integer.toString(12,16);
        (format nil "~X" 12)
書式付変換 PRINT USING "書式";値 Format$(値,"書式")
WorksheetFunction.Text(値,"書式")
  String.Format("書式", 値) write(値:書式) PIC'書式'
PUT EDIT
printf 書式,値; printf("書式",値); CString::Format("書式",値)
TRACE("書式",値)
    Format(値, "書式") TO_CHAR(値,"書式") TO_CHAR(値,"書式") (format nil "書式" 値)
#### ####(右寄せにならないが…)     4 ZZZ9 %4d %4d %4d       9999 9999 ~4D
  0000       9999   %04d %04d     0000 0000 0000 ~4,'0D
+### なし       ---9   %+4d %+4d       S999 S999  
###.## ##0.00     6:2 ZZ9V.99 %6.2f %6.2f %6.2f       999.99 999.99 ~6,2F
  MSX-BASIC VBA VBS VB.NET PASCAL PL/I Perl C言語 VC++(MFC) Java JavaScript C#(.NET) SQL(Oracle) PL/SQL(Oracle) Lisp
マルチバイト文字                   Charset.defaultCharset()
System.getProperty("file.encoding")
  Encoding.Default      
      Dim str As String = Encoding.GetEncoding("shift_jis").GetString(バイト配列);           String str = new String(バイト配列, "MS932");   string str = Encoding.GetEncoding("shift_jis").GetString(バイト配列);      
      Dim buf() As Byte = Encoding.GetEncoding("shift_jis").GetBytes(str);           byte[] buf = str.getBytes("MS932");
引数が無いと、デフォルトのキャラセット
  byte[] buf = Encoding.GetEncoding("shift_jis").GetBytes(str);      
言語 ASCII JIS SJIS EUC UTF8 UTF16 Unicode 備考 更新日
java(コンパイルオプション・ファイル) US-ASCII ISO-2022-JP MS932
Shift_JIS
Windows-31J
EUC-JP UTF-8 UTF-16   →Javaで使える名称一覧 2007.2.13
C#
VB.NET
Encoding.
ASCII
Encoding.
GetEncoding("iso-2022-jp")
Encoding.
GetEncoding("shift_jis")
Encoding.
GetEncoding(932)
Encoding.
GetEncoding("EUC-JP")
Encoding.
UTF8
Encoding.
Unicode
  System.Text.Encoding 2007.3.15
HTML(charset) us-ascii ISO-2022-JP Shift_JIS
x-sjis(Netscape拡張)
EUC-JP
x-euc-jp
utf-8   unicode 大文字でも小文字でもどちらでも可  
XML(encoding)   ISO-2022-JP Shift_JIS euc-jp UTF-8     省略時はUTF-8  
コマンドプロンプト us
chcp 437
  jp
chcp 932
          2006.7.24
VC++コードページ 0000   03a4(十進数に直すと932)       04b0   2006.9.9
UNIX(LANG)     ja_JP.PCK ja ja_JP.UTF-8        
iconv   jis SJIS eucJP UTF-8
UTF-8-Java
    man iconv_ja  
Oracle(NLS_LANG) Japanese_Japan.
US7ASCII
  Japanese_Japan.
JA16SJIS
Japanese_Japan.
JA16EUC
Japanese_Japan.
UTF8
       
PostgreSQL
(PGCLIENTENCODING)
(\encoding)
SQL_ASCII   SJIS EUC_JP UNICODE        

[カテゴリ: プログラミング全般]

[通知用URL]



  • Hatenaブックマークに追加
  • livedoorクリップに追加
  • del.icio.usに追加
  • FC2ブックマークに追加

最終更新時間:2008年05月25日 22時59分12秒