S-JIS[2005-01-16/2008-08-17] 変更履歴

プログラミング言語比較

文字列操作

  • MSX-BASIC [2005-01-16/2006-07-26]
  • VisualBasic for Application [2005-01-16/2008-08-17]
  • VBScript [2007-04-06]
  • VB.NET [2006-04-15/2007-03-15]
  • PASCAL [2005-02-10]
  • PL/I [2005-01-16]
  • Perl [2005-03-12/2006-07-11]
  • C言語(gcc, WIN32) [2005-01-16/2006-10-18]
  • Visual C++(MFC) [2005-01-16/2006-08-23]
  • Java [2005-01-16/2008-08-17]
  • JavaScript [2006-01-08/2008-06-19]
  • C# [2006-03-04/2006-07-24]
  • SQL(Oracle[2005-02-07/2006-07-08]
  • PL/SQL(Oracle) [2005-02-27/2006-07-08]
  • Common Lisp [2005-04-04]
文字・文字コード
エンコーディング
 
変数の末尾に「$
又は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"      
代入 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)  
 
比較 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);        
 
同一文字複数 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(変数, "文字")       @配列名=split(/文字/,$変数); strtok   配列名 = 変数.split("文字"); 配列名=変数.split('文字');        
連結   変数 = Join(配列名, "区切り文字") 変数 = Join(配列名, "文字")             String s = Arrays.toString(配列);
変数 = s.substring(1, s.length() - 1);
         
空白除去 なし 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')  
 
文字判断               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
 
マルチバイト文字                   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);      

言語比較全般へ戻る / 参考文献 / プログラム記号比較 / 技術メモへ戻る
メールの送信先:ひしだま