新JavaScript入門  JavaScript,Neo-Generation  DOM  WSH  掲示板  表紙
7.ページを作る  9.日本語の扱い 
新JavaScript入門
8. 文字列
文字列の定義
文字列は次のように定義します。
    var a = new String();
    var b = new String("ジュマペール");
 
実際には、次のようにするのが普通です。
    var a = "";
    var b = "ジュマペール";
 
文字列の長さ
文字列の長さは length プロパティで得られます。
    str1 = "012345";
    n = str1.length;    // 6
 
文字列の操作
文字列の結合は演算子 + で行います。
    str1 = "a";
    str2 = "b";
    str3 = str1 + str2;     // "ab"
 
加算と同じ記号を使い紛らわしいのですが、しょうがないですね。
逆に、文字列の切り出しは、 charAtsubstring で行います。
    str1 = "012345";
    str2 = str1.charAt(2);      // "2"
    str3 = str1.substring(2,4); // "23"
 
charAt は1文字だけ切り出します。 str.charAt(n) とすると、先頭を0としてn番目の文字を切り出します。 Cでstr1[n]とするのと同じです。 ただし、Javaではchar型の値が返りますが、 JavaScriptではStringオブジェクトが返ります。
これに対して substring では文字列を切り出すことができます。 str.substring(m, n) で charAt と同じ数え方で、 m番目からn-1番目までを切り出します。
以下、引数が特殊な場合:
    str1 = "012345";
    str4 = str1.substring(2,8);     // "2345"
    str5 = str1.substring(-1,4);    // "0123"
    str6 = str1.substring(2,2);     // ""
    str7 = str1.substring(4,2);     // "23"
    
    引数が文字列の長さ以上の時は(文字列の長さ-1) とみなす
    引数が負の場合は0とみなす
    1番目の引数と2番目の引数が等しい場合は長さ0の文字列を返す
    1番目の引数より2番目の引数が小さい場合は引数を入れ替える
 
最後のルール以外はそんなに無理は感じませんね。 最後のルールはこうするといったい何がうれしいんでしょうか。
文字列の検索
文字列の検索は indexOflastIndexOf で行います。
indexOf は前から、 lastIndexOf は後から検索し、 検索された文字列の場所を charAt と同じ数え方で返します。
str.indexOf(searchstring, [index])で、 indexから searchstring を検索し最初に見つかった場所を返します。
    str1 = "0123456789012345678901234";
    pos1 = str1.indexOf("1");           // 1
    pos2 = str1.lastIndexOf("1");       // 21
    pos3 = str1.indexOf("123", 2);      // 11
    pos4 = str1.lastIndexOf("123", 2);  // 1
 
以下、特殊な場合:
    str1 = "0123456789012345678901234";
    pos5 = str1.indexOf("a");           // -1
    pos6 = str1.indexOf("1", -1);       // 1
    pos7 = str1.lastIndexOf("1", -1);   // -1
    pos8 = str1.indexOf("1", 50);       // -1
    pos9 = str1.lastIndexOf("1", 50);   // 21
 
検索されなかった場合は -1 を返します。 第2引数が 0 〜 stringname.length - 1 の範囲を超えるときは、 小さい方へ外れている場合は 0 、大きい方へ外れている場合は stringname.length - 1 とみなします。

あまりリファレンス的になると面白くないので、プログラムを作ってみました。 splitメソッドと同様の機能の関数です。

    function test1(form) {
        var a = new Array();
        //"%"で区切って配列に格納する
        split(form.text1.value, "%", a);
        //配列を","で繋げて表示
        form.text1.value = a.join(",");
    }
    
    function split(str, deli, arr) {
        var prepos = 0;
        var index = 0;
        var deli_length = deli.length;
        
        //strからdeliが検索されなくなるまでループする
        while((pos = str.indexOf(deli, prepos)) != -1) {
            arr[index++] = str.substring(prepos, pos);
            prepos = pos + deli_length;
        }
        arr[index] = str.substring(prepos);
    }
 
"a%b%c"のように"%"で文字区切って入力してください。 ","で区切られて返ってきます。
Internet Explorer 3.0 では join メソッドがサポートされていないので、実は使わないようにしています。
文字変換
toLowerCase で大文字を小文字に、 toUpperCase 小文字を大文字に変換できます。
    str1 = "abCD";
    str2 = str1.toLowerCase();      // "abcd"
    str3 = str1.toUpperCase();      // "ABCD"
 
文字飾り
Stringオブジェクトに文字飾りのメソッドを働かせて write または writeln すると、 ページ上での文字列の表示が指定通りになります。
    var str1 = "第4巻の発売日は\n";
    var str2 = "12月5日"
    var str3 = "だよ";
    document.open("text/html");
    document.writeln("");
    document.write(str1);
    document.write(str2.bold().fontcolor("red"));
    document.writeln(str3);
    document.writeln("");
    document.close();
 
このボタンを押すと、Internet Explorer 3.02 ではブラウザ自体が落ちることがあります。
気を付けなければならないことは、メソッドを働かせるのは write または writeln の引数の中でなければならないということです。 このため二重に文字飾りをしたい場合は、 上のように連続してメソッドを働かせます。
上のコードで作ったページのソースは次のようになります。
    <BODY>
    第4巻の発売日は
    <FONT COLOR="red"><B>12月5日</B></FONT>だよ
    </BODY>
 
要するに、boldメソッドを働かせるのは <B> タグを付けるのと同じ、、、
ということであまり大した意味は無いように思えます。 両側に付けなければならないのが1回だけでよくなるってところでしょうか。
同様のメソッドには、
bigblinkfixedfontsizeitalicssmallstrikesubsup
があります。
新しい機能については、 String(1) String(2) をご覧ください。
Written 10/31/97
Modified 4/13/03
first, prev, next, exit