• 締切済み

substringとlengthの連携コード

Smessage = Smessage.substring(2,Smessage.length) + Smessage.substring(0,2);の部分ですが、動きがイマイチわからないです。 substringで配列2つ目(= S2)とlengthで持ってきた値=4(だがsubstringの終了インデックスはその前の数字を考えるので3つ目= S3)を抜き出し、2つ目のsubstringで配列0番目(= S1)=と2番目(= S3)を抜き出し、 結果S2とS4 + S1とS3をSmessageに代入しているんですか? 順番としてはS2が最初に来て次にS4、 S1最後にS3が来るのではないんですか? でも実行結果はS1、S2、S3、S4と順番通りになっています。この辺が良くわかりません。 <!DOCTYPE HTML> <html><head> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="Content-Style-Type" content="text/css"> <title></title> <script type="text/javascript"> <!-- var TC = 0 ; var S1 = "1つ目の空白 "; var S2 = "2つ目の空白 "; var S3 = "3つ目の空白 "; var S4 = "ここにメッセージ......。"; var Smessage = S1+S2+S3+S4; var timeID=setTimeout("",1) ; function Message() { if (TC < 1000) { TC++ ; window.status = Smessage; Smessage = Smessage.substring(2,Smessage.length) + Smessage.substring(0,2); clearTimeout(timeID) timeID = setTimeout("Message()",300); } else { window.status = " " } } //--> </script> <style type="text/css"> <!-- body { background-color: #AFEEEE; } --> </style> </head> <body onLoad="Message()"> ★ステータス行に文字を流してます </body></html>

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

> Smessage.substring(2,Smessage.length) の()内は2と1つ目の空白 からここにメッセージを数えた文字数が入るのでしょうか?  > 次のsubstring(0,2)は0番目から2番目の文字なので、「1・つ・目」の3文字? これくらいは、自分で調べましょう。 ・マニュアルや解説サイトを探して、読む。 ・alertやデバッガを使って確認する。 など。 例えば上のプログラムの該当個所周辺を window.status = Smessage; // デバグ用 alert(Smessage); alert(Smessage.length); alert(Smessage.substring(2,Smessage.length)) ; alert(Smessage.substring(0,2)); // Smessage = Smessage.substring(2,Smessage.length) + Smessage.substring(0,2); // デバグ用 alert(Smessage); // とでもすれば、その2つの質問への答えになるはずです。

KAIJI-000
質問者

補足

返事が遅れました。 変数の文字列を同じにして考えていたのがバカでした。 var Sm1 = "01つMe"; var Sm2 = "2tsu目"; var Sm3 = "3津メ"; var Sm4 = "ここにメッセージを入れます......。"; とし、 さらに Smess = Smess.substring(2,4) + Smess.substring(0,2); とし、時間もtimeID = setTimeout("Mess()",5000); のようにゆっくりにしてalertで試してみるべきでした。 検証不足は申し訳ないです。 ただそれでもすいません。まだ、仕組みが解ってません。 なぜ文字がずれているのですか? substiringは完全に取り除くと言うイメージですか? 1回目のアラートで つM01 これはわかります。 でも2回目のアラート 01つM になぜなるのかわかりません. それとlengthが間に入っているのがややこしいです。

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

> substringで配列2つ目(= S2) からして間違いです。 var Smessage = S1+S2+S3+S4; はS1とS2とS3とS4を連結して一つの文字列にするもの。 var S1 = "1つ目の空白 "; var S2 = "2つ目の空白 "; var S3 = "3つ目の空白 "; var S4 = "ここにメッセージ......。"; だから var Smessage = "1つ目の空白 2つ目の空白 3つ目の空白 ここにメッセージ......。"; になる。 Smessageは配列ではない。 文字列.substringは、文字列の一部を切り出して、新しい文字列にするもの。 マニュアルなどに書いてある「インデックス」は「何文字目」というのとほぼ同義。 「インデックス0番目の文字」=「一文字目」

KAIJI-000
質問者

補足

こちらへの回答も有難うございます。 Smessage.substring(2,Smessage.length) の()内は2と1つ目の空白 からここにメッセージを数えた文字数が入るのでしょうか? 次のsubstring(0,2)は0番目から2番目の文字なので、「1・つ・目」の3文字?

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

今、試せる環境に無いのですが。 Smessageに”ABCDEF”でも代入し、Alartで Smessage.substring(2,Smessage.length) + Smessage.substring(0,2); を表示するだけのプログラム書いてみるとかしたほうが 結局早くないですか?

KAIJI-000
質問者

補足

ご提案有難うございます。ただ質問としてはコードについてかみ砕いた解説をお願いしたいです。

関連するQ&A